React Native项目集成iOS原生模块
今天学习一下怎么在React Native项目中集成iOS原生模块,道理和在iOS原生项目中集成React Native模块类似.他们的界面跳转靠的都是iOS原生的UINavigationController.
iOS原生端:
1.AppDelegate.h
// 创建一个原生的导航条
@property (nonatomic, strong) UINavigationController *nav;
AppDelegate.m
修改部分代码:
// 初始化Nav
_nav = [[UINavigationController alloc]initWithRootViewController:rootViewController]; self.window.rootViewController = _nav;
2.新建一个UIViewController即可.
3.新建类PushNative,继承NSObject,遵循.实现RCTBridgeModule协议,引入相关类.
PushNative.h
//
// PushNative.h
// RNAddNative
//
// Created by Shaoting Zhou on 2017/2/22.
// Copyright © 2017年 Facebook. All rights reserved.
// #import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTLog.h>
@interface PushNative : NSObject<RCTBridgeModule> @end
PushNative.h
//
// PushNative.m
// RNAddNative
//
// Created by Shaoting Zhou on 2017/2/22.
// Copyright © 2017年 Facebook. All rights reserved.
// #import "PushNative.h"
#import "TestController.h"
#import "AppDelegate.h"
@implementation PushNative
RCT_EXPORT_MODULE();
// 接收传过来的 NSString
RCT_EXPORT_METHOD(RNOpenOneVC:(NSString *)name){
NSLog(@"%@", name);
//跳转界面
//主要这里必须使用主线程发送,不然有可能失效
dispatch_async(dispatch_get_main_queue(), ^{
TestController *one = [[TestController alloc]init]; AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; [app.nav pushViewController:one animated:YES];
});
}
@end
RN端:
引入NativeModules,InteractionManager
var Push = NativeModules.PushNative; //这个PushNative就是原生中的PushNative类
然后在点击方法里面写入
Push.RNOpenOneVC('测试'); //这个RNOpenOneVC()就是原生中的PushNative类中的方法
完整代码如下:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View,
NativeModules,
InteractionManager
} from 'react-native';
var Push = NativeModules.PushNative;
export default class RNAddNative extends Component {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
我是RN界面
</Text>
<Text style={styles.instructions} onPress={()=>this.btnOnclick()}>
push到iOS原生界面
</Text>
</View>
);
}
btnOnclick =() =>{
InteractionManager.runAfterInteractions(()=> {
Push.RNOpenOneVC('测试');
});
}
}
演示效果+源码参考: https://github.com/pheromone/IOS-native-and-React-native-interaction 中的RNAddNative.zip
React Native项目集成iOS原生模块的更多相关文章
- react native项目在ios上运行测试,亲测
参考文章:https://segmentfault.com/a/1190000014416132 说明:参考文章中有对AppDelegate.m文件的操作,我的RN版本是0.57.8未设置,也可成功运 ...
- React Native 轻松集成分享功能(iOS 篇)
产品一直催我在 RN 项目中添加分享功能,一直没找到合适的库,今天让我看到了一个插件分享给大家. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台 ...
- React Native 轻松集成统计功能(iOS 篇)
最近产品让我加上数据统计功能,刚好极光官方支持数据统计 支持了 React Native 版本 第一步 安装: 在你的项目路径下执行命令: npm install janalytics-react-n ...
- 【腾讯Bugly干货分享】React Native项目实战总结
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e16a7640ad7b4682c64a7 “8小时内拼工作,8小时外拼成长 ...
- 如何用 React Native 创建一个iOS APP?
诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 Reac ...
- 技术实践丨React Native 项目 Web 端同构
摘要:尽管 React Native 已经进入开源的第 6 个年头,距离发布 1.0 版本依旧是遥遥无期."Learn once, write anywhere",完全不影响 Re ...
- React Native – 使用 JavaScript 开发原生应用
前不久,Facebook 在F8开发者大会上正式开源了 React Native 项目.不过目前只有 iOS 版,Android 版还需要再等一段时间,这是最新的用 JavaScript 语言开发原生 ...
- React Native 项目运行在 Web 浏览器上面
React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...
- 如何用 React Native 创建一个iOS APP?(三)
前两部分,<如何用 React Native 创建一个iOS APP?>,<如何用 React Native 创建一个iOS APP (二)?>中,我们分别讲了用 React ...
随机推荐
- WDA基础十三:常用模板管理
常用的模板一般是SMW0和OAOR,根据不同需求来的. WAD有个不好的地方就是不支持GUI上的OLE和DOI,所以需要做转换,下面是常用的方式: FUNCTION ZCRM_DOWNLOAD_TEM ...
- WDA基础七:TABStrip
这个组件很少用. 一般用这个,是为了页面好看,还有就是布局排版的问题,因为多个页签其实占的是一块地... 新建ELEMENT TABStrip,右键tabstrip,插入页签,需要几个加几个... 加 ...
- NOIP2003加分二叉树
题目描述 设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号.每个节点都有一个分数(均为正整数),记第ii个节点的分数为di,treedi,tree ...
- openssl修改版本号
1.查看当前openssl版本号 openssl version 2.查看openssl所在位置 which openssl 3.查看保存版本号的libcrypto.so所在位置 ldd /usr/b ...
- [转]每天一个linux命令(44):top命令
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...
- 巧用call,appl有 根据对象某一属性求最大值
查找对象数组中某属性的最大最小值的快捷方法 例如要查找array数组中对象的value属性的最大值 var array=[ { "index_id": 119, "are ...
- learning ddr Electrical Characteristics and AC Timing
reference: JEDS79-3F.pdf , page:181
- day06字典类型
基本使用: 1.用途:用来存多个(不同种类的)值 2定义方式:在{}内用逗号分隔开多个key:value的元素,其中value可以是任意数据类型,而key的功能通常是用来描述value的,所以key通 ...
- day27-python阶段性复习-基础
一.基础资料,安装python Python 跨平台的,(Linux,Windows,mac) 网站www.python.org 解释器交互方式 Ipython Python shell https: ...
- [BZOJ1588]营业额统计
Problem 每次给你一个数,找出前面的数与这个数的差的绝对值的最小值 Solution Splay Notice 找不到前驱和后继时,会出错. Code #include<cmath> ...