iOS原生和React-Native之间的交互2

react

今天看下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

以上是 iOS原生和React-Native之间的交互2 的全部内容, 来源链接: utcz.com/z/381209.html

回到顶部