react-native調(diào)用OC原生

一直想學(xué)學(xué)這一塊東西.但是感覺要對底層非常了解.
所以一直拖延了下來.
現(xiàn)在有時(shí)間,就簡單的先傳值開始

首先RN調(diào)用OC

在Xcode 創(chuàng)建一個(gè)類.

image.png

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

image.png

這里也需要注意下根據(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);
image.png

還是比較簡單的.
后面再看下如何調(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)圖

image.png

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);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容