1. 程式人生 > >cocos2d-js如何在IOS平臺上使用js直接呼叫OC方法

cocos2d-js如何在IOS平臺上使用js直接呼叫OC方法

地址:https://github.com/chukong/cocos-docs/blob/v3-unified-documentation/manual/framework/html5/v3/reflection-oc/zh.md

如何在IOS平臺上使用js直接呼叫OC方法

在Cocos2d-JS v3.0 RC2中,與Android上js呼叫Java一樣,Cocos2d-JS也提供了在iOS和Mac上js直接呼叫Objective-C的方法,示例程式碼如下:

    var ojb = jsb.reflection.callStaticMethod(className, methodNmae, arg1, arg2, .....);

jsb.reflection.callStaticMethod方法中,我們通過傳入OC的類名,方法名,引數就可以直接呼叫OC的靜態方法,並且可以獲得OC方法的返回值。

  • 引數中的類名,只需要傳入OC中的類名即可,與Java不同,類名並不需要路徑。比如你在工程底下新建一個類NativeOcClass,只要你將他引入工程,那麼他的類名就是NativeOcClass,你並不需要傳入它的路徑。
    import <Foundation/Foundation.h>
    @interface NativeOcClass : NSObject
    +(BOOL)callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content;
    @end

方法

  • js到OC的反射僅支援OC中類的靜態方法。
  • 方法名比較要需要注意,我們需要傳入完整的方法名,特別是當某個方法帶有引數的時候,你需要將他的:也帶上。根據上面的例子。此時的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他們之間的:
  • 如果是沒有引數的函式,那麼他就不需要:,如下程式碼,他的方法名是callNativeWithReturnString,由於沒有引數,他不需要:,跟OC的method寫法一致。
    +(NSString *)callNativeWithReturnString;

使用示例

  • 下面的示例程式碼將呼叫上面NativeOcClass
    的方法,在js層我們只需要這樣呼叫:
    var ret = jsb.reflection.callStaticMethod("NativeOcClass", 
                                               "callNativeUIWithTitle:andContent:", 
                                               "cocos2d-js", 
                                               "Yes! you call a Native UI from Reflection");
  • 這裡是這個方法在OC的實現,可以看到是彈出一個native的對話方塊。並把titlecontent設定成你傳入的引數,並返回一個boolean型別的返回值。
    +(BOOL)callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content{
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title message:content delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
        [alertView show];
        return true;
    }
  • 此時,你就可以在ret中接受到從OC傳回的返回值(true)了。

注意

在OC的實現中,如果方法的引數需要使用float,int,bool的,請使用如下型別進行轉換:

  • float,int 請使用NSNumber型別
  • bool請使用BOOL型別。
  • 例如下面程式碼,我們傳入2個浮點數,然後計算他們的合併返回,我們使用NSNumber而不是int,float去作為引數型別。
+(float) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{
    float result = [num1 floatValue]+[num2 floatValue];
    return result;
}
  • 目前引數和返回值支援 int, float, bool, string,其餘的型別暫時不支援。

相關推薦

cocos2d-js如何在IOS平臺上使用js直接呼叫OC方法

地址:https://github.com/chukong/cocos-docs/blob/v3-unified-documentation/manual/framework/html5/v3/reflection-oc/zh.md 如何在IOS平臺上使用js直接呼叫O

cocos2d-js如何在android平臺上使用js直接呼叫Java方法

地址:https://github.com/chukong/cocos-docs/blob/v3-unified-documentation/manual/framework/html5/v3/reflection/zh.md 如何在android平臺上使用js直接呼叫

JavaScript直接呼叫OC程式碼

在專案中需要通過UIWebVIew開啟一個網頁,在網頁中點選按鈕彈出oc的對話方塊。 在UIWebview中載入的js程式碼中通過改變document.locations=“” // 需要使用javascriptCore.framework庫 #import

JS----直接呼叫函式與call呼叫的區別 (函式的三種呼叫方式介紹)

直接呼叫 直接呼叫函式是最常見 最普通的方式,直接以函式附加的物件作為呼叫者, 在函式後括號內傳入引數來呼叫函式 例如: window.alert("測試程式碼"); 其中呼叫者如果是window可以省略, 即直接alert("測試程式碼"); 以call() 方法

iOS與JS互動,OC呼叫JS方法JS呼叫OC方法,URL解碼

 首先 iOS7開始 蘋果公佈了JavaScriptCore.framework 它使得JS與OC的互動更加方便了。  第一步:匯入framework  OC 呼叫JS方法 :(一句話即可) -(void)webViewDidFinishLoad:(UIWebV

C呼叫OC方法

從彙編角度來看:無論是C函式或者是OC方法,他們同樣都是一個函式的地址。區別在於:C函式呼叫直接通過 函式名(引數)找到函式指標,直接執行函式地址,不需要考慮其他問題,只要定義好就能直接用.   OC 是屬於類的方法,結構上多了一層封裝性,要調方法必須要找到 類的

80_iOS乾貨43_呼叫OC方法傳遞多個引數的11種方法

一,方法中寫多個引數呼叫 - (void)test1 { [self testFunctionWithParams1:6 :@"234131#"]; } - (void)testFunctionWithParams1:(int )number :(NSString *)string {

String型別原型上,例項可以直接呼叫方法

var str = "welcome to duyi"; console.log(str.charAt()); //裡面傳數字,返回指定位的字元 console.log(str.charAt(3) == str[3]) //返回true console.log(str.charCodeAt(

修改window.external使JS呼叫Delphi方法

在JS中,有一個比較特殊的物件,即window.external,用它可以呼叫瀏覽器提供的外部方法 一個很簡單的例子就是將當前頁新增到收藏夾 window.external.addFavorite("http://blog.csdn.net/youthon","弘石的部落

頁面播放器,全部JS呼叫 SWFObject方法

之前在頁面上面放視訊,總是用: <object classid="clsid:05589FA1-C356-11CE-BF01-00AA0055595A" id="ActiveMovie1" width="239" height="250"><param na

js前臺呼叫後臺方法方法呼叫篇)

  首先是沒有引數的後臺方法(該方法是載入客戶端下來選單控制元件): public string GetRole() { string result = ""; DataSet ds = a.SelectRole("");

linux臺上image檔案掛載的方法

在linux平臺上,編譯得到image檔案之後, 可以通過掛載image檔案到指定目錄的方法,對image檔案中的內容進行修改,然後再重新打包生成新的image檔案。 具體方法: 先使用simg2img對image進行格式轉換。 然後將轉換之後的image掛載到指定檔案目錄

Android中呼叫js方法js呼叫本地方法

Android中內建了WebKit模組,而該模組的Java層檢視類就是WebView,所有需要使用Web瀏覽器功能的Android都需要建立該檢視類物件顯示和處理請求的網路資源。目前WebKit支援Http、Https、Ftp和JavaScript請求。下面我們重點看一下如

c#靜態方法不可以直接呼叫例項方法

靜態方法是一種特殊的成員方法,它不屬於類的某一個具體的例項。非靜態方法可以訪問類中的任何成員,而靜態只能訪問類中的靜態成員。 看這個例子: class A{int x;static int y;static int F(){x=1; //錯誤,不允許訪問y=2; //正確,允

為什麼我們呼叫start()方法時會執行run()方法?為什麼我們不能直接呼叫run()方法?他們之間有什麼區別?

為什麼我們呼叫start()方法時會執行run()方法? 因為類Thread中的start方法中,呼叫了Thread中的run方法。順便說下,類A繼承了Tread類,在A中寫run方法,就會覆蓋掉Thread中的run方法,所以此時呼叫start方法後,實現的

jxbrowser java程式碼直接呼叫js程式碼 (破解版請聯絡作者)免license

final Browser browser = new Browser(); BrowserView browserView = new BrowserView(browser); JFrame frame = new JFrame(); f

OC和UI實現購物車功能 在iOS臺上

購物車專案 作用:可以通過按鈕把物品簡單的新增到購物車中 思路: 一,設定兩個加減按鈕,有普通,高亮和enable狀態,在interface中有屬性宣告 二,設定購物車的imageview,在interface中有屬性宣告 三,設定陣列裝載字典物件,字典裡包含物品圖片

JS呼叫Native方法OC

最近用到js呼叫原生方法,在這裡做個總結記錄。 呼叫原生時會用到JSContext,官方文件解釋如下: /*! @interface @discussion A JSContext is a JavaScript execution environment. All JavaSc

[RN]js檔案直接呼叫.json檔案當物件

file tree ./ data.json test.js 使用 import data from "./data" ..... render(){ data.xxxx } 感觸 JS開發真你孃的

JS呼叫OC簡單例項-傳遞一個或者多個引數給oc方法

// // ViewController.m // JSCallsOC // // Created by hq on 16/4/19. // Copyright © 2016年 hanqing. All rights reserved. // #import "