RN - 从RN传值至iOS原生
2019-04-11 本文已影响0人
Joh蜗牛
一.导入工具类
.h文件代码如下:
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RNBridge : NSObject<RCTBridgeModule>
@end
.m文件代码如下:
#import "RNBridge.h"
#import <React/RCTBridge.h>
//iOS调用RN
#import <React/RCTEventDispatcher.h>
@implementation RNBridge
@synthesize bridge = _bridge;
//导出模块
RCT_EXPORT_MODULE(); //此处不添加参数即默认为这个OC类的名字
// 在RN 中调用此方法,可传值
RCT_EXPORT_METHOD(RNOpenVC:(NSDictionary *)msg){
NSLog(@"RN传入原生界面的数据为:%@",msg);
//主要这里必须使用主线程发送,不然有可能失效
dispatch_async(dispatch_get_main_queue(), ^{
// 接收到数据时,发送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"RNOpenVC" object:msg];
});
}
@end
二.RN代码
跳转按钮事件:传值至原生(方法名需与工具类中方法名保持一致)
const purchaseButtonClick = () => {
RNBridge.RNOpenVC({'type':'purchase'});
};
三.iOS代码
- (void)viewDidLoad {
[super viewDidLoad];
// 接收通知(工具类中发送的通知)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pushiOSVC:) name:@"RNOpenVC" object:nil];
}
- (void)pushiOSVC:(NSNotification *)infoNotification {
NSDictionary *dic = [infoNotification object];
NSLog(@"%@",dic);
// 根据数据,做出对应操作
}