React-Native 橋接iOS原生開發(fā)詳解
react-native的文檔的原生模塊中可以看到清洗的代碼 傳送門
接下來先說一下筆者的要實(shí)現(xiàn)的功能:
在iOS原生代碼中集成高德導(dǎo)航,在RN中用JS去調(diào)用原聲代碼,并進(jìn)行跳轉(zhuǎn),
接下來是筆者遇到的問題與不好理解的地方,寫出來跟大家分享讓大家少走彎路.
剛開始也是一頭霧水且查資料也是到處都是但是都沒有解決問題.
iOS原生寫法
在iOS中創(chuàng)建類繼承NSObject(OC語言).
//類的.h文件 #import <Foundation/Foundation.h> #import <React/RCTBridgeModule.h> #import <React/RCTLog.h> #import <React/RCTUIManager.h> @interface GaoMapManager : NSObject<RCTBridgeModule> @end // 類的.m文件 #import "GaoMapManager.h" #import <AMapNaviKit/AMapNaviKit.h> #import <UIKit/UIKit.h> #import "GPSNaviViewController.h" @implementation GaoMapManager @synthesize bridge = _bridge; RCT_EXPORT_MODULE(); RCT_EXPORT_METHOD ( pushViewControllerXYZ:(nonnull NSNumber *)reactTag ) { RCTUIManager *uiManager = _bridge.uiManager; GPSNaviViewController *gps = [[GPSNaviViewController alloc] init]; dispatch_async(uiManager.methodQueue, ^{ [uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary<NSNumber *,UIView *> *viewRegistry) { UIView * view = viewRegistry[reactTag]; UIViewController *vc = (UIViewController *)view.reactViewController; [vc presentViewController:gps animated:YES completion:^{ }]; }]; }); }
以上是全部iOS端的類文件的代碼.當(dāng)然繼承高德地圖是需要在AppDelegate.m文件中注冊高德apiKey(如果地圖不顯示,Xcode中會顯示錯誤,apikey不生效需要10分鐘之后生效且一個key對應(yīng)一個app,否者會出錯)
RN中寫法
看到這大家如果認(rèn)真看了上面的代碼,會注意到reactTag這個參數(shù),在JS中怎么傳這個參數(shù)呢,又代表著什么意思
其實(shí)很簡單
import { NativeModules } from 'react-native'; export default NativeModules.GaoMapManager;
這是筆者寫的一個untils的CommoniOSUtils.JS文件.調(diào)用的時候直接用文件名調(diào)用iOS原生的方法名即可
// findNodeHandle(this.homeHead)就是對應(yīng)的reactTag參數(shù)的值 CommoniOSUtils.pushViewControllerXYZ(findNodeHandle(this.homeHead));
findNodeHandle引入方式
import { findNodeHandle, } from 'react-native';
看到這里大家應(yīng)該清楚怎么回事了.我還要啰嗦一句具體是怎么個情況(個人理解)
在RN中用findNodeHandle方法去獲取ref控件的tag值,將這個值傳入到iOS原生中,再用
利用這個tag獲取當(dāng)當(dāng)前的view,根據(jù)view獲取當(dāng)前VC,用VC去跳轉(zhuǎn)頁面且傳值使用.完成調(diào)用
高德導(dǎo)航的一些坑
1,用pod引入的是5.3.0版本,demo中確實(shí)5.5.0版本,方法少了很多,自己修改一下問題不大
2, iOS9以下會有內(nèi)存泄漏問題,導(dǎo)致崩潰
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 關(guān)于React Native使用axios進(jìn)行網(wǎng)絡(luò)請求的方法
- 詳解React Native與IOS端之間的交互
- iOS端React Native差異化增量更新的實(shí)現(xiàn)方法
- React Native中NavigatorIOS組件的簡單使用詳解
- react-native組件中NavigatorIOS和ListView結(jié)合使用的方法
- ios原生和react-native各種交互的示例代碼
- React Native第三方平臺分享的實(shí)例(Android,IOS雙平臺)
- React Native 集成 iOS 原生功能(打印機(jī)功能為例)
相關(guān)文章
一文詳解React Redux設(shè)計(jì)思想與工作原理
最近看項(xiàng)目中使用了?Redux,?便嘗試了解一波?Redux?的設(shè)計(jì)思想與工作原理,所以本文詳細(xì)的給大家介紹了Redux設(shè)計(jì)思想與工作原理,需要的朋友可以參考下2023-09-09Input標(biāo)簽自動校驗(yàn)功能去除實(shí)現(xiàn)
這篇文章主要為大家介紹了Input標(biāo)簽的自動拼寫檢查功能去除實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07React如何使用sortablejs實(shí)現(xiàn)拖拽排序
這篇文章主要介紹了React如何使用sortablejs實(shí)現(xiàn)拖拽排序問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01React BootStrap用戶體驗(yàn)框架快速上手
這篇文章主要介紹了React BootStrap用戶體驗(yàn)框架快速上手的相關(guān)知識,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03React18的useEffect執(zhí)行兩次如何應(yīng)對
這篇文章主要給大家介紹了關(guān)于React18的useEffect執(zhí)行兩次如何應(yīng)對的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用React具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07React?Hook中的useState函數(shù)的詳細(xì)解析
Hook 就是 JavaScript 函數(shù),這個函數(shù)可以幫助你鉤入(hook into) React State以及生命周期等特性,這篇文章主要介紹了React?Hook?useState函數(shù)的詳細(xì)解析的相關(guān)資料,需要的朋友可以參考下2022-10-10React使用Electron開發(fā)桌面端的詳細(xì)流程步驟
React是一個流行的JavaScript庫,用于構(gòu)建Web應(yīng)用程序,結(jié)合Electron框架,可以輕松地將React應(yīng)用程序打包為桌面應(yīng)用程序,本文詳細(xì)介紹了使用React和Electron開發(fā)桌面應(yīng)用程序的步驟,需要的朋友可以參考下2023-06-06React?Fiber構(gòu)建completeWork源碼解析
這篇文章主要為大家介紹了React?Fiber構(gòu)建completeWork源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02