一直想學(xué)學(xué)這一塊東西.但是感覺要對底層非常了解.
所以一直拖延了下來.
現(xiàn)在有時(shí)間,就簡單的先傳值開始
首先RN調(diào)用OC
在Xcode 創(chuàng)建一個(gè)類.

在TestOBJ.h里導(dǎo)入

這里也需要注意下根據(jù)版本不同,有些同學(xué)會報(bào)錯(cuò)
你也可以改成
#import "RCTBridgeModule"
引入:#import “RCTBridgeModule.h” 且使用 <RCTBridgeModule> 接口
接下來
為了實(shí)現(xiàn)RCTBridgeModule協(xié)議,類需要包含RCT_EXPORT_MODULE()宏(這個(gè)宏也可以添加一個(gè)參數(shù)用來指定在Javascript中訪問這個(gè)模塊的名字。如果你不指定,默認(rèn)就會使用這個(gè)Objective-C類的名字
RCT_EXPORT_MODULE();
//橋接到Javascript的方法返回值類型必須是void。React Native的橋接操作是異步的,所以要返回結(jié)果給Javascript,必須通過回調(diào)或者觸發(fā)事件來進(jìn)行
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進(jìn)行調(diào)用,那么就需要進(jìn)行聲明。聲明通過RCT_EXPORT_METHOD()宏來實(shí)現(xiàn):
j2oFun1:函數(shù)名,后續(xù)是兩個(gè)參數(shù),分別是NSString 和 int 類型數(shù)據(jù)。
調(diào)用成功后,我們輸出這兩個(gè)傳來的值到控制臺。
下面我們再看看RN JS的代碼
隨便穿件一個(gè)界面,然后寫一個(gè)點(diǎn)擊方法.
這里我就不截圖了.
//將OC注冊進(jìn)來的模塊取出
var Jto = require('react-native').NativeModules.TestOBJ;
//在你點(diǎn)擊事件里寫上如下代碼,然后再xcode控制臺看看是否調(diào)用成功
Jto.j2oFun1('Jonson',22);

還是比較簡單的.
后面再看下如何調(diào)用OC 頁面.有時(shí)間再更新,
下面是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)建一個(gè)控制器;
OneController
下面是項(xiàng)目結(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);