如何在IOS平台上使用js直接調用OC方法(轉)


轉自:http://cocos2d-x.org/docs/manual/framework/html5/v3/reflection-oc/zh

在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,其余的類型暫時不支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM