如何在IOS平臺上使用js直接調(diào)用OC方法(轉(zhuǎn))

在Cocos2d-JS v3.0 RC2中掩浙,與Android上js調(diào)用Java一樣夜焦,Cocos2d-JS也提供了在iOS和Mac上js直接調(diào)用Objective-C的方法虹蓄,示例代碼如下:

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

jsb.reflection.callStaticMethod方法中池凄,我們通過傳入OC的類名枣察,方法名魄眉,參數(shù)就可以直接調(diào)用OC的靜態(tài)方法砰盐,并且可以獲得OC方法的返回值。

參數(shù)中的類名坑律,只需要傳入OC中的類名即可岩梳,與Java不同,類名并不需要路徑晃择。比如你在工程底下新建一個類NativeOcClass冀值,只要你將他引入工程,那么他的類名就是NativeOcClass藕各,你并不需要傳入它的路徑池摧。

import <Foundation/Foundation.h> 
@interface NativeOcClass : NSObject 
+(BOOL)callNativeUIWithTitle:(NSString *) title andContent:(NSString *)content;
@end

方法

js到OC的反射僅支持OC中類的靜態(tài)方法。
方法名比較要需要注意激况,我們需要傳入完整的方法名作彤,特別是當某個方法帶有參數(shù)的時候,你需要將他的:也帶上乌逐。根據(jù)上面的例子竭讳。此時的方法名字是callNativeUIWithTitle:andContent:,不要漏掉了他們之間的:浙踢。
如果是沒有參數(shù)的函數(shù)绢慢,那么他就不需要:,如下代碼,他的方法名是callNativeWithReturnString洛波,由于沒有參數(shù)胰舆,他不需要:,跟OC的method寫法一致蹬挤。
+(NSString *)callNativeWithReturnString;

使用示例

下面的示例代碼將調(diào)用上面NativeOcClass的方法缚窿,在js層我們只需要這樣調(diào)用:

var ret = jsb.reflection.callStaticMethod("NativeOcClass","callNativeUIWithTitle:andContent:","cocos2d-js","Yes! you call a Native UI from Reflection");

這里是這個方法在OC的實現(xiàn),可以看到是彈出一個native的對話框焰扳。并把title和content設(shè)置成你傳入的參數(shù)倦零,并返回一個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的實現(xiàn)中蹋嵌,如果方法的參數(shù)需要使用float、int葫隙、bool的栽烂,請使用如下類型進行轉(zhuǎn)換:
float,int 請使用NSNumber類型
bool請使用BOOL類型停蕉。
例如下面代碼愕鼓,我們傳入2個浮點數(shù)钙态,然后計算他們的合并返回慧起,我們使用NSNumber而不是int、float去作為參數(shù)類型册倒。

+(float) addTwoNumber:(NSNumber *)num1 and:(NSNumber *)num2{ 
    float result = [num1 floatValue]+[num2 floatValue]; 
    return result;
}

目前參數(shù)和返回值支持 int, float, bool, string蚓挤,其余的類型暫時不支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驻子,一起剝皮案震驚了整個濱河市灿意,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崇呵,老刑警劉巖缤剧,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異域慷,居然都是意外死亡荒辕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門犹褒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抵窒,“玉大人,你說我怎么就攤上這事叠骑±罨剩” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵宙枷,是天一觀的道長掉房。 經(jīng)常有香客問我,道長慰丛,這世上最難降的妖魔是什么卓囚? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮璧帝,結(jié)果婚禮上捍岳,老公的妹妹穿的比我還像新娘富寿。我一直安慰自己,他們只是感情好锣夹,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布页徐。 她就那樣靜靜地躺著,像睡著了一般银萍。 火紅的嫁衣襯著肌膚如雪变勇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天贴唇,我揣著相機與錄音搀绣,去河邊找鬼。 笑死戳气,一個胖子當著我的面吹牛链患,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓶您,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼麻捻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呀袱?” 一聲冷哼從身側(cè)響起贸毕,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夜赵,沒想到半個月后明棍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡寇僧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年摊腋,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婉宰。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡歌豺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出心包,到底是詐尸還是另有隱情类咧,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布蟹腾,位于F島的核電站痕惋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏娃殖。R本人自食惡果不足惜值戳,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炉爆。 院中可真熱鬧堕虹,春花似錦卧晓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赦政,卻和暖如春胜宇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恢着。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工桐愉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掰派。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓从诲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碗淌。 傳聞我的和親對象是個殘疾皇子盏求,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容