在react-native的项目中跳转到原生iOS页面

我在github上更新了我学习react-native的一些心得和小技巧,下面的这个例子也在里面,如果现在的项目不忙,基本每天都会更新,希望可以帮助到各位读者。react-native-learn

如果遇到什么问题可以在评论区回复,或者加QQ群397885169讨论

推荐集成"react-native": "0.44.0"版本,"react": "16.0.0-alpha.6",

需求:

前端时间写过两篇关于在原生iOS项目中新建react-native页面,并跳转到原生的文章,但昨天有人问我怎么从原生的react-native项目中跳转到自动生成的iOS页面里。


react-native项目.png

我就研究了一下,发现其实这个跳转和之前的跳转流程基本是一样的。
这个例子在我的github项目3中

步骤

原理

如果想从react-native中跳转到自带的原生页面,首要的问题就是跳转,怎么跳转。
在react-native中提供给了我们Navigator这个组件,而原生的iOS也提供了UINavigationController,所以想要跳转,我们就需要用到这两个东西啦。

  • Navigator
    这个是react-native提供给我们跳转其他页面的组件,需要在react-native项目中引入Navigator
<View style={{ flex: 1 }}>
    <Navigator
        initialRoute={{ name: 'Root', component: Root }}
        style={{height:64}}
        configureScene={(route) => {
            if (route.sceneConfig) {
                return route.sceneConfig;
            }
        return Navigator.SceneConfigs.PushFromRight;
        } 
    }
        renderScene={(route, navigator) => {
            let Component = route.component;
            return (
                    <Component navigator = {navigator} route = {route} {...route.passProps} />
                )} 
    }
/>
</View>

关于react-native中Navigator使用的文章网上有很多,我在这里就不多写了,可能以后会写篇文章说一下我对Navigator的理解。

  • UINavigationController
    这个是原生iOS开发中用到最多的控件,每次跳转的时候都会用到它,但我们是想要从react-native跳转到这个里面,所以需要在原生的项目中将rootViewController设置为UINavigationController

AppDelegate.h

// 创建一个原生的导航条
@property (nonatomic, strong) UINavigationController *nav;

AppDelegate.m

// 初始化Nav
  _nav = [[UINavigationController alloc]initWithRootViewController:rootViewController];
  
  self.window.rootViewController = _nav;

这样我们想要跳转的准备就算是完成了,接下来就是将我们想要跳转的页面,传给react-native,告诉它我要跳转到哪个页面。

项目目录.png

上面是我的项目修改后的项目目录,其中蓝色部分是我要跳转的页面,红色部分是我告诉react-native跳转的方法。

原生项目中

  • PushNative类

PushNative.h

#import <Foundation/Foundation.h>
// 导入RCTBridgeModule类,这个是react-native提供
#import "RCTBridgeModule.h"
// 遵守RCTBridgeModul协议
@interface PushNative : NSObject<RCTBridgeModule>
@end

PushNative.m

#import "PushNative.h"
#import "RCTBridge.h"

// 导入跳转的页面
#import "TestController.h"
// 导入AppDelegate,获取UINavigationController
#import "AppDelegate.h"

@implementation PushNative

RCT_EXPORT_MODULE(PushNative)
// RN跳转原生界面
// RNOpenOneVC指的就是跳转的方法,下面会用到
RCT_EXPORT_METHOD(RNOpenOneVC:(NSString *)msg){
  
  NSLog(@"RN传入原生界面的数据为:%@",msg);
  //主要这里必须使用主线程发送,不然有可能失效
  dispatch_async(dispatch_get_main_queue(), ^{
    TestController *one = [[TestController alloc]init];
    
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    
    [app.nav pushViewController:one animated:YES];
  });
}
  • TestController类
self.navigationItem.title = @"我是原生页面哟~";

完成上面的步骤之后,只需要最后一步就可以成功的跳转啦!

react-native项目中

  • NativeModules
    需要导入NativeModules组件,这个是官方提供给我们与原生交互的组件,通过它我们才能调用到原生的方法
  • 初始化要跳转的方法
// 看到 PushNative 是不是很熟悉,没错这个就是原生中写的那个类
// 后面一定要一样哦,前面可以随意定制。
var Push = NativeModules.PushNative;
  • 跳转
InteractionManager.runAfterInteractions(()=> {
    // RNOpenOneVC这个也是写在原生里面的再PushNative中哦~
    Push.RNOpenOneVC('测试');
});

好啦,写到这里我们的跳转就算是大功告成了!如果有什么不懂的地方,可以去我的项目中看看。

总结

学习react-native也好几个月了,这段时间也是踩坑无数,但学习的过程中也是一个成长的过程,我很喜欢这个感觉。如果大家有什么问题,可以在简书里面评论,也可以私信我。
ps:之前没下简书这个软件,所以之前文章的评论都没怎么看,但我昨天下了一个。😝😝😝

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容