今天看下iOS原生->RN:
这里有个问题:
* 我这里只能通过rn->ios->rn来是实现
* 如果想直接ios-rn 那个iOS中的CalendarManager的self.bridge是nil,只有先通过rn-ios之后该值才有值.
* 这里没搞明白
如果你研究通了,希望留言告诉我
直接撸代码:
RN:
1 /** 2 * Sample React Native App 3 * https://github.com/facebook/react-native 4 * @flow 5 * iOS调用RN: 6 * 我这里只能通过rn->ios->rn来是实现, 7 * 如果想直接ios-rn 那个iOS中的CalendarManager的self.bridge是nil,只有先通过rn-ios之后该值才有值. 8 * 这里没搞明白 9 */ 10 11 import React, { Component } from 'react'; 12 import { 13 AppRegistry, 14 StyleSheet, 15 Text, 16 View, 17 NativeModules, 18 NativeAppEventEmitter 19 } from 'react-native'; 20 var nativeAppEv; 21 var CalendarManager = NativeModules.CalendarManager; 22 export default class NativeAddRN extends Component { 23 // 构造 24 constructor(props) { 25 super(props); 26 // 初始状态 27 this.state = { 28 str:'' 29 }; 30 } 31 render() { 32 if(this.state.str == '少停'){ 33 return ( 34 <View style={styles.container}> 35 <Text style={styles.welcome}> 36 少停 37 </Text> 38 </View> 39 ); 40 }else { 41 return ( 42 <View style={styles.container}> 43 <Text style={styles.welcome}> 44 shaoting 45 </Text> 46 </View> 47 ); 48 } 49 50 51 } 52 53 componentWillMount() { 54 55 } 56 57 componentWillMount() { 58 CalendarManager.RNCallOC(); 59 nativeAppEv= NativeAppEventEmitter.addListener( 60 'EventReminder', 61 (reminder) => { 62 this.setState({ 63 str:reminder 64 }) 65 } 66 ); 67 68 } 69 70 componentWillUnmount() { 71 nativeAppEv.remove(); 72 } 73 } 74 75 const styles = StyleSheet.create({ 76 container: { 77 flex: 1, 78 justifyContent: 'center', 79 alignItems: 'center', 80 backgroundColor: '#F5FCFF', 81 }, 82 welcome: { 83 fontSize: 20, 84 textAlign: 'center', 85 margin: 10, 86 }, 87 instructions: { 88 textAlign: 'center', 89 color: '#333333', 90 marginBottom: 5, 91 }, 92 }); 93 94 AppRegistry.registerComponent('NativeAddRN', () => NativeAddRN);
iOS原生:
新建一个类CalendarManager,继承于NSObject,实现协议<RCTBridgeModule>
1 // 2 // CalendarManager.h 3 // rnAndN 4 // 5 // Created by Shaoting Zhou on 2017/2/10. 6 // Copyright © 2017年 Facebook. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h> 10 #import <React/RCTBridgeModule.h> 11 #import <React/RCTLog.h> 12 @interface CalendarManager : NSObject<RCTBridgeModule> 13 14 @end
1 // 2 // CalendarManager.m 3 // rnAndN 4 // 5 // Created by Shaoting Zhou on 2017/2/10. 6 // Copyright © 2017年 Facebook. All rights reserved. 7 // iOS调用原生: 8 // 我这里只能通过rn->ios->rn来实现, 9 // 如果想直接ios-rn 那个iOS中的CalendarManager的self.bridge是nil,只有先通过rn-ios之后该值才有值. 10 // 这里没搞明白 11 // 12 13 #import "CalendarManager.h" 14 #import "RCTBridge.h" 15 #import "RCTEventDispatcher.h" 16 @implementation CalendarManager 17 RCT_EXPORT_MODULE(); 18 @synthesize bridge = _bridge; 19 20 RCT_EXPORT_METHOD(RNCallOC){ 21 // [self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@"少停"]; 22 [self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@"shaoting"]; 23 24 } 25 @end
效果就是RN可以收到上面这段代码发过去的值:[self.bridge.eventDispatcher sendAppEventWithName:@"EventReminder" body:@"shaoting"];
现在传参数是好了,至于iOS调用RN的方法,以后有时间再弄一下吧.该回到原生开发了.
演示效果和demo源码:https://github.com/pheromone/IOS-native-and-React-native-interaction