RN、ios 混合开发
https://github.com/CodeRabbitYu/react-native-learn
https://www.jianshu.com/p/2baeac04275e
在react-native的项目中跳转到原生iOS页面
ios 打印
RCTLogInfo(@"打印%@", str); // 字符串
RCTLogInfo(@"打印整形:%i",number); // %li ; %ld ; %d
RCTLogInfo(@"BOOL--b-->%@",isYES?@"YES":@"NO");
参数类型
string (NSString)
number (NSInteger, float, double, CGFloat, NSNumber)
boolean (BOOL, NSNumber)
array (NSArray) 可包含本列表中任意类型
object (NSDictionary) 可包含 string 类型的键和本列表中任意类型的值
function (RCTResponseSenderBlock)
常量
NSString *const liveState = @"1";
变量
@property (nonatomic, assign) CGFloat viewHeight;
CGRect rectNav = self.navigationController.navigationBar.frame; //导航栏
CGRect rectStatus = [[UIApplication sharedApplication] statusBarFrame]; // 状态栏
self.viewHeight = SCREEN_HEIGHT - rectNav.size.height - rectStatus.size.height;
// rectNav.size.height 导航栏的高度
// rectStatus.size.height 状态栏的高度
自定义返回按钮
- (void)viewDidLoad {
[super viewDidLoad];
UIButton *leftBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; // 自定义返回按钮
[leftBtn setImage:[UIImage imageNamed:@"back-app"] forState:UIControlStateNormal];
[leftBtn addTarget:self action:@selector(navigationShouldPopOnBackButton) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *leftBarItem = [[UIBarButtonItem alloc] initWithCustomView:leftBtn];
self.navigationItem.leftBarButtonItem = leftBarItem;
}
- (BOOL)navigationShouldPopOnBackButton{
[self.navigationController popViewControllerAnimated:YES];
return YES;
}
判断字符串相等
if([self.courseActiveLayout isEqualToString:videoLayout])
react-native 跳转ios以传值
// AppDelegate.h
// 创建一个原生的导航条
@property (nonatomic, strong) UINavigationController *nav;
@property (strong,nonatomic) NSString *mClassId; // 全局变量 房间id
// AppDelegate.m
// 初始化Nav
_nav = [[UINavigationController alloc]initWithRootViewController:rootViewController];
_nav.navigationBarHidden = YES;
self.window.rootViewController = _nav;
// PushNative.h
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
// 遵守RCTBridgeModul协议
@interface PushNative : NSObject<RCTBridgeModule>
@end
// PushNative.m
#import "PushNative.h"
#import <React/RCTBridge.h>
#import <React/RCTLog.h>
// 导入跳转的页面
#import "HomeController.h"
// 导入AppDelegate,获取UINavigationController
#import "AppDelegate.h"
@implementation PushNative
RCT_EXPORT_MODULE();
// RN跳转原生界面
// RNOpenOneVC指的就是跳转的方法,下面会用到
// layout 课堂布局 1:视频模式;3:文档模式;
// state 1 直播 3 回放
RCT_EXPORT_METHOD(RNOpenOneVC:(NSString *)mClassId nickName: (NSString *)nickName pwd:(NSString *)pwd layout:(NSString *)layout state:(NSString *)state title:(NSString *)title){
RCTLogInfo(@"RN传入原生界面的数据为:%@mClassId", mClassId);
//主要这里必须使用主线程发送,不然有可能失效
dispatch_async(dispatch_get_main_queue(), ^{
HomeController *homeVc = [[HomeController alloc]init ];
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
app.mClassId = mClassId;
[app.nav pushViewController:homeVc animated:YES];
});
}
@end
RN 调用
let PushIos = NativeModules.PushNative;
PushIos.RNOpenOneVC(t.class_id, res.realname || '天天', r.student_pwd, String(t.layout), String(t.state), t.title + '直播');
ios pch 文件
pch文件在iOS项目中的作用
文件中存放预编译的头文件,使得我们不用再项目中使用的时候再去引入头文件。
可以将全局的宏存放在pch文件中,提供全局使用。