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
var ret = jsb.reflection.callStaticMethod("NativeOcClass",
"callNativeUIWithTitle:andContent:",
"cocos2d-js",
"Yes! you call a Native UI from Reflection");
- 這裡是這個方法在OC的實現,可以看到是彈出一個native的對話方塊。並把
title
和content
設定成你傳入的引數,並返回一個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 "