***如何從RN頁面,再跳轉(zhuǎn)到原生VC頁面?
首先,已經(jīng)做好了一個RN頁面,即,由RCTRootView解析轉(zhuǎn)化原生的UIView,即可實(shí)現(xiàn)原生頁面跳轉(zhuǎn)到RN頁面。具體步驟略...
下面來看,從RN跳到原生頁面。
1、新建 RCTModules 類(繼承自NSObject)
封裝一個方法,使用“通知”進(jìn)行消息的傳送,從而實(shí)現(xiàn)頁面的跳轉(zhuǎn)。
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RTModule : NSObject<RCTBridgeModule>
@end
#import "RTModule.h"
#import <React/RCTBridge.h>
@implementation RTModule
RCT_EXPORT_MODULE(RTModule)
//RN跳轉(zhuǎn)原生界面
RCT_EXPORT_METHOD(RNOpenOneVC:(NSString *)msg){
NSLog(@"RN傳入原生界面的數(shù)據(jù)為:%@",msg);
//主要這里必須使用主線程發(fā)送,不然有可能失效
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter]postNotificationName:@"RNOpenOneVC" object:nil];
});
}
@end
2、在加載(RCTRootView)的原生VC頁面中
添加通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doPushNotification:) name:@"RNOpenOneVC" object:nil];
實(shí)現(xiàn)通知觸發(fā)方法
- (void)doPushNotification:(NSNotification *)notification{
NSLog(@"成功收到===>通知");
OneViewController *vc = [[OneViewController alloc]init]; //目標(biāo)VC
[self.navigationController pushViewController:vc animated:YES];
//注意不能在這里移除通知,否則push進(jìn)去后有pop失效
}
3、在RN的js代碼中
發(fā)出RNOpenOneVC通知
var RNModules = NativeModules.RTModule;
...
<View style={styles.container}>
<TouchableOpacity
onPress={()=>RNModules.RNOpenOneVC('測試')}>
<Text>跳轉(zhuǎn)按鈕</Text>
</TouchableOpacity> </View>
這樣,就可以成功實(shí)現(xiàn)從RN頁面,再跳轉(zhuǎn)到原生VC頁面了。