【cocos2d-js官方文檔】二十三、如何在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,其餘的類型暫時不支持。

轉載自:http://www.cocos2dx.net/post/254

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章