react-native的文檔的原生模塊中可以看到清洗的代碼 傳送門
接下來先說一下筆者的要實現的功能:
在iOS原生代碼中集成高德導航,在RN中用JS去調用原聲代碼,并進行跳轉,
接下來是筆者遇到的問題與不好理解的地方,寫出來跟大家分享讓大家少走彎路.
剛開始也是一頭霧水且查資料也是到處都是但是都沒有解決問題.
iOS原生寫法
在iOS中創建類繼承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端的類文件的代碼.當然繼承高德地圖是需要在AppDelegate.m文件中注冊高德apiKey(如果地圖不顯示,Xcode中會顯示錯誤,apikey不生效需要10分鐘之后生效且一個key對應一個app,否者會出錯)
RN中寫法
看到這大家如果認真看了上面的代碼,會注意到reactTag這個參數,在JS中怎么傳這個參數呢,又代表著什么意思
其實很簡單
import { NativeModules } from 'react-native';export default NativeModules.GaoMapManager;
這是筆者寫的一個untils的CommoniOSUtils.JS文件.調用的時候直接用文件名調用iOS原生的方法名即可
// findNodeHandle(this.homeHead)就是對應的reactTag參數的值 CommoniOSUtils.pushViewControllerXYZ(findNodeHandle(this.homeHead));
findNodeHandle引入方式
import { findNodeHandle,} from 'react-native';
看到這里大家應該清楚怎么回事了.我還要 主站蜘蛛池模板: 都兰县| 广水市| 蕉岭县| 吉木乃县| 南丰县| 通榆县| 晋州市| 滕州市| 台北市| 姜堰市| 益阳市| 仪陇县| 萨嘎县| 津南区| 荣成市| 龙江县| 伊宁市| 灵台县| 营山县| 尼勒克县| 鄯善县| 洛阳市| 房产| 什邡市| 阿拉善右旗| 清镇市| 甘南县| 襄垣县| 平原县| 桂阳县| 荔浦县| 自治县| 新河县| 蒙山县| 巢湖市| 蒙阴县| 治县。| 通山县| 松阳县| 山阴县| 山阴县|