使用runtime 实现weex 跳转原生页面

使用runtime 实现weex 跳转原生页面,第1张

概述一、简述  最近项目组打算引入weex,并选定了一个页面进行试水。页面很简单,主要是获取数据渲染页面,并可以跳转到指定的页面。跟之前使用RN相比,weex确实要简单很多。从下图中我们可以看到,weex页面需要跳转到

一、简述

  最近项目组打算引入weex,并选定了一个页面进行试水。页面很简单,主要是获取数据渲染页面,并可以跳转到指定的页面。跟之前使用RN 相比,weex 确实要简单很多。从下图中我们可以看到,weex 页面需要跳转到原生页面,并且跳转到哪个页面我们可能并不能写死。也就是说只要原生页面之前项目中写过了,那么理论上来说使用weex 可以任意调用。那么问题来了,我原来的页面可能只知道名字,我怎么为那个页面传值呢?比如有个页面orderDetailVC  ,跳转时需要传入orderID,即orderDetailVC.orderID = @"123";

二、思考

  可能最直接的想法就是直接原生给weex 提供一个方法,让weex 传入orderID,然后再push。但是如果明天我们需要跳转到另一个页面merchantDetailVC呢?它需要的不是orderID了,可能是一个merchantID,甚至更多参数。那怎么才能实现任意跳转呢?我的想法是,项目是我写的,需要跳转到哪个类,那么这个类名我肯定是清楚的,并且这个类应该需要什么参数我也是清楚的。只不过我可能不知道怎么用weex 把它参数传过去而已。如果知道了类名就意味着我知道了这个类,我能找到这个类,那么我就知道这个类有哪些属性了,这个类的所有属性我都能拿到,只不过有些是我需要给它赋值的,有些是不需要处理的。

三、实现

  整体的思路是:原生给weex 提供一个通用的跳转方法。参数是类名和属性字典。

//控制器相关/* vcname: 页面名称 param:页面所需参数(如原来的页面需要传递小区ID,工单号等等,字典形式传过去,key 与页面所需参数名称一致即可。 */-(voID)pushVIEwController:(Nsstring *)vcname param:(NSDictionary *)param;/* 将APP 当前展示的页面pop */-(voID)popVIEwController;/* vcname: 页面名称 param:页面所需参数(如原来的页面需要传递小区ID,工单号等等,字典形式传过去,key 与页面所需参数名称一致即可。 */-(voID)presentVIEwController:(Nsstring *)vcname param:(NSDictionary *)param finish:(WXModuleCallback)callback;/* 将APP 当前展示的页面dismiss */-(voID)dismissVIEwController:(WXModuleCallback)callback;

 提供方法后weex 可以这样调用:

确定了方案之后,剩下唯一的事情就是如何实现给weex 提供的方法。代码如下:

-(voID)pushVIEwController:(Nsstring *)vcname param:(NSDictionary *)param{  //获取类  Class vcclass = NSClassFromString(vcname);  if (vcclass == nil) {    return;  }  BaseVIEwController *vc = [[vcclass alloc] init];  vc.hIDesBottombarWhenPushed = YES;  //属性数量  unsigned int count = 0;  //获取属性列表  objc_property_t *pList = class_copyPropertyList(vcclass,&count);  for (int i = 0; i<count; i++) {    //取出属性    objc_property_t property = pList[i];    //取出属性名称    Nsstring *propertyname = [Nsstring stringWithUTF8String:property_getname(property)];    //以这个属性名称作为key,查看传入的字典里是否有这个属性的value    if (param[propertyname]) {      [vc setValue:param[propertyname] forKey:propertyname];    }  }  //释放  free(pList);  //获取当前页面控制器  /*   获取当前页面控制器是根据响应链获取的。   */  UIVIEwController *currentVC = [Utils getCurrentVC];  if ([currentVC isKindOfClass:[UINavigationController class]]) {    [(UINavigationController *)currentVC pushVIEwController:vc animated:YES];  }else{    [currentVC.navigationController pushVIEwController:vc animated:YES];  }}

 经过小规模自测发现是可以实现需求的。但是由于实现时间不长,可能会有不足之处,请谨慎参考。如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

总结

以上是内存溢出为你收集整理的使用runtime 实现weex 跳转原生页面全部内容,希望文章能够帮你解决使用runtime 实现weex 跳转原生页面所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1147239.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存