美文网首页
万能界面跳转

万能界面跳转

作者: kangomake | 来源:发表于2019-04-23 17:56 被阅读0次
- (void)button:(UIButton *)sender{

    NSLog(@"button_click");
    NSDictionary * params = @{@"class":@"CRFoundTextAController",
                              @"property":@{
                                      @"ID":@"123",
                                      @"type":@"12"
                                      }
                              };

    [self push:params];

}

//万能界面跳转
- (void)push:(NSDictionary *)params{

    NSString * class = [NSString stringWithFormat:@"%@",params[@"class"]];
    const char * className = [class cStringUsingEncoding:NSASCIIStringEncoding];
    // 从一个字串返回一个类
    Class NewClass = objc_getClass(className);
    if(!NewClass){
        // 创建一个类
        Class superClass = [NSObject class];
        NewClass = objc_allocateClassPair(superClass, className, 0);
        // 注册你创建的这个类
        objc_registerClassPair(NewClass);
    }
    // 创建对象
    id instance = [[NewClass alloc] init];
    // 对该对象赋值属性
    NSDictionary * propertys = params[@"property"];
    [propertys enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        // 检测这个对象是否存在该属性
        if ([self checkIsExistPropertyWithInstance:instance verifyPropertyName:key]) {
            // 利用kvc赋值
            [instance setValue:obj forKey:key];
        }
    }];


    NSLog(@"instance-%@",instance);

    // 获取导航控制器
    //    UIWindow * window = [UIApplication sharedApplication].delegate.window;
    //    UITabBarController *tabVC = (UITabBarController *)window.rootViewController;
    //    UINavigationController *pushClassStance = (UINavigationController *)tabVC.viewControllers[tabVC.selectedIndex];
    //    // 跳转到对应的控制器
    //    [pushClassStance pushViewController:instance animated:YES];

    [self.navigationController pushViewController:instance animated:YES];

}

//检测对象是否存在该属性
- (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName
{
    unsigned int outCount, i;
    // 获取对象里的属性列表
    objc_property_t * properties = class_copyPropertyList([instance
                                                           class], &outCount);
    for (i = 0; i < outCount; i++) {
        objc_property_t property =properties[i];
        //  属性名转成字符串
        NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
        // 判断该属性是否存在
        if ([propertyName isEqualToString:verifyPropertyName]) {
            free(properties);
            return YES;
        }
    }
    free(properties);
    return NO;
}

相关文章

  • 万能跳转界面

    万能跳转界面,完美的解耦方案 目标: 1.我们不想import这个控制的名字,然后push到一个新的界面, 2.我...

  • 万能界面跳转

  • iOS利用RunTime来实现万能跳转

    1.万能跳转的应用场景: (1)手机App通过推送过来的数据内容来跳转不同的界面,并把界面数据展示出来。(2)手机...

  • IOS收到推送后界面跳转

    在APP中收到推送通知后难免会出现界面跳转的情况,下面呢我就会说一下,收到推送通知后界面万能跳转的方法。 首先我们...

  • 万能跳转界面方法

    https://www.jianshu.com/p/8b3a9155468d 在开发项目中,会有这样变态的需求: ...

  • runtime万能界面跳转

    在你的开发过程中,是否遇到过如下的需求: 在tableView类型的展示列表中,点击每个cell中人物头像都可以跳...

  • 万能跳转界面方法

  • iOS集成ReactNative跳转、传值

    iOS跳转RN界面iOS跳转RN界面传值iOS跳转不同的RN界面(一)iOS跳转不同的RN界面(二)RN界面跳转到...

  • 打开设置选项

    跳转到流量使用情况设置界面 跳转到vpn界面 电池管理界面 打开关于设备界面

  • Android界面跳转到几种方式

    简单界面跳转 带数据传递的界面跳转 接收数据 带有回调的界面跳转 回调传递数据到上个界面 接收回调的数据

网友评论

      本文标题:万能界面跳转

      本文链接:https://www.haomeiwen.com/subject/eyjbgqtx.html