React Native与原生的交互、跳转(仅iOS)
背景:
最近开始接触React Native,学习了一些RN与iOS之间的交互,现在就总结一下吧,如果有写得不对的,求指出。
创建工程:
我是直接创建了一个RN工程--在终端输入:react-native init RNDemo,然后打开工程,跑起来。

然后我比较喜欢用sublime,于是就先在这个项目里自定义一些按钮先。


原生跳RN
好吧,先原生跳RN吧,打开Xcode,创建两个ViewController:OrgOneViewController和RNOneViewController,然后把AppDelegate.m文件里面的

复制到RNOneViewController.m的viewDidLoad方法中,并把launchOptions改成nil和设置:self.view= rootView;

然后在AppDelegate.m上把原生控制器加上去,额

在OrgOneViewController.m中加一个按钮,用于跳转到RN界面

然后就把程序跑起来吧~

当然,不想在RN界面看到导航栏也可以,在RNOneViewController.m里隐藏导航栏就可以了,

这样导航栏就隐藏了,返回原生就可以使用RN里面的按钮的了,这也涉及到RN跳原生的步骤了。当然,不适用导航栏使用modal来跳转也可以。
RN跳原生
好了···开始从RN跳回原生了,先建立一个RNBridgeModule类,可以理解为一种桥接RN与原生的类,,并实现RCTBridgeModule协议



通过RCT_EXPORT_METHOD()宏来声明来提供给JS端访问,当然这个宏里面也可以传递参数的,这里没写出。在这个宏里面,使用主线程发送通知,让通知告知承载RCTRootView的控制器进行返回。所以我们需要在RNOneViewController.m里面接收通知

然后,再到RN代码中添加相关的,代码如下

最后跑起来的效果是酱紫的:

迟点再写点RN与iOS的其他交互吧~