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文件中,提供全局使用。

ios pch 文件

ios 生命周期

posted @ 2021-04-14 17:21  源(博客)  阅读(284)  评论(0编辑  收藏  举报