页面需要跳转到原生页面,要知道h小姐需要的只是一个诚恳的、诚实的依靠ca88手机版

如上所述大家要么用框框来界定自身的想想,你感觉不容许的业务并不代表不容许产生,现实生活中国和U.S.A.女与野兽的传说天天都在演出,不掌握你们是明知故问忽视或许怎么了。。。。。。。。。。人不是以长相、身体高度、出身来区分和配对的,要知道h小姐必要的只是一个虔诚的、诚实的借助,现实有与此相类似供给的丫头第一次全国代表大会堆,所以不用说多金、什么怎么就不配,唉。。。。。。。

一、简述

  近些日子项目组筹算引进weex,并选定了一个页面实行试水。页面很简短,紧借使获取数据渲染页面,并得以跳转到钦定的页面。跟此前运用LX570N
比较,weex 确实要轻松比较多。从下图中我们得以看来,weex
页面必要跳转到原生页面,并且跳转到哪个页面大家或然并不能写死。也便是说只要原生页面从前项目中写过了,那么理论上的话使用weex
可以随意调用。那么难点来了,小编原本的页面恐怕只领悟名字,笔者怎么为特别页面传值呢?比方有个页面orderDetailVC
 ,跳转时索要传入orderId,即orderDetailVC.orderId = @”123″; 

ca88手机版 1

二、思考

  也许最直白的主见就是平素原生给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 能够如此调用:

ca88手机版 2

规定了方案以往,剩下独一的事体正是如何完结给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];
    }
}

 经过小框框自测开掘是足以达成需要的。可是由于实现时间十分短,恐怕会有不足之处,请小心参谋。

 

相关文章