一直想學(xué)學(xué)這一塊東西.但是感覺要對底層非常了解.
所以一直拖延了下來.
現(xiàn)在有時間,就簡單的先傳值開始
首先RN調(diào)用OC
在Xcode 創(chuàng)建一個類.
在TestOBJ.h里導(dǎo)入
這里也需要注意下根據(jù)版本不同,有些同學(xué)會報錯
你也可以改成
#import "RCTBridgeModule"
引入:#import “RCTBridgeModule.h” 且使用 <RCTBridgeModule> 接口
接下來
為了實現(xiàn)RCTBridgeModule協(xié)議绿渣,類需要包含RCT_EXPORT_MODULE()宏(這個宏也可以添加一個參數(shù)用來指定在Javascript中訪問這個模塊的名字豆瘫。如果你不指定,默認就會使用這個Objective-C類的名字
RCT_EXPORT_MODULE();
//橋接到Javascript的方法返回值類型必須是void绑改。React Native的橋接操作是異步的,所以要返回結(jié)果給Javascript磅网,必須通過回調(diào)或者觸發(fā)事件來進行
RCT_EXPORT_METHOD(j2oFun1:(NSString *)dataString dateNumber:(int)dateNumber)
{
NSLog(@"js call iOS function j2oFun1\n dataString: %@ |dateNumber :%d",dataString,dateNumber);
}
想要將oc的函數(shù)導(dǎo)出給js進行調(diào)用煎殷,那么就需要進行聲明。聲明通過RCT_EXPORT_METHOD()宏來實現(xiàn):
j2oFun1:函數(shù)名违帆,后續(xù)是兩個參數(shù),分別是NSString 和 int 類型數(shù)據(jù)金蜀。
調(diào)用成功后刷后,我們輸出這兩個傳來的值到控制臺。
下面我們再看看RN JS的代碼
隨便穿件一個界面,然后寫一個點擊方法.
這里我就不截圖了.
//將OC注冊進來的模塊取出
var Jto = require('react-native').NativeModules.TestOBJ;
//在你點擊事件里寫上如下代碼,然后再xcode控制臺看看是否調(diào)用成功
Jto.j2oFun1('Jonson',22);
還是比較簡單的.
后面再看下如何調(diào)用OC 頁面.有時間再更新,
下面是RN調(diào)用控iOS跳轉(zhuǎn)控制器
AppDelegate.h
@property (nonatomic,strong)UINavigationController *nav;
AppDelegate.m文件里添加
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
// self.window.rootViewController = rootViewController;
//添加如下2行代碼
_nav = [[UINavigationController alloc]initWithRootViewController:rootViewController];
self.window.rootViewController = _nav;
[self.window makeKeyAndVisible];
接下來創(chuàng)建一個控制器;
OneController
下面是項目結(jié)構(gòu)圖
TestOBJ.m文件里添加如下代碼,以前的方法可以不用動
//對了這里說明下,這里一定要使用主線程.否則會不成功
dispatch_async(dispatch_get_main_queue(), ^{
OneViewController *one = [[OneViewController alloc]init];
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[app.nav pushViewController:one animated:YES];
});
下面是RN的代碼了
//繼續(xù)使用上次測試代碼,發(fā)現(xiàn)可以跳轉(zhuǎn)了.
Jto.j2oFun1('Jonson',22);