Runtime运用:动态跳转到任何一个类

2018-05-30  本文已影响12人  蔚尼

研究runtime一段时间后,发现runtime的运用其实很广泛。一个功能的实现也有很多种方法,主要是看我们是否会运用所掌握的知识。

以前遇到过,从服务器获取一部分数据展示一个轮播图。点击轮播图中不同的图片进入到不同的界面。像这样:


轮播图
    // 这个规则肯定事先跟服务端沟通好,跳转对应的界面需要对应的参数
    NSDictionary *userInfo = @{
                               @"class": @"PushViewController",//类名
                               @"alertStr": @"要提示的内容"//这个类需要的参数
                               };
    
    const char * className = [userInfo[@"class"] cStringUsingEncoding:NSASCIIStringEncoding];
    Class newClass = objc_getClass(className);
    if (!newClass) {//如果没有这个类,进行创建
        
        Class newClass = objc_allocateClassPair([UIViewController class],className , 0);
        objc_registerClassPair(newClass);
        
    }
    //传递至给newClass
    id instance = [[newClass alloc] init];
    [instance setValue:userInfo[@"alertStr"] forKey:@"alertStr"];
    
    // 跳转到对应的控制器
    [self.navigationController pushViewController:instance animated:YES];
上一篇 下一篇

猜你喜欢

热点阅读