美文网首页
iOS利用Runtime实现万能界面跳转

iOS利用Runtime实现万能界面跳转

作者: 涛昇依旧 | 来源:发表于2019-04-24 20:35 被阅读0次

    iOS开发中经常会用到类似于九宫格那样的布局,点击布局中的item要跳转到对应的界面去,就类似于这种


    九宫格布局 tableViewCell跳转.png
    点击每一个item跳转的界面都不一样,按照我们一般的写法我们首先要把每一个将要跳转的ViewController的头文件导入到该控制器中,然后在
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    

    方法中根据indexPath.row去判断点击的哪一个item,然后再生成对应的ViewController,再执行push操作,这样不仅会因为导入大量的头文件而导致这个界面编译速度变慢,其次如果九宫格内的布局发生改变(界面的排列顺序改变、根据服务器返回的对应的隐藏某些item、某个viewController的名字改变),那么你还需要一个个的再去判断indexPath.row来生成对应的ViewController然后再去push,这样也太麻烦了,所以我们可以对此稍微的改变一下。
    首先我们要利用的就是类的反射机制,就是可以通过字符串去生成对应的class,就类似于这样

    SEL selector = NSSelectorFromString(selectorName)
    

    亦或者这样

    UIViewController *VC = [NSClassFromString(viewControllerId) new];
    

    是不是发现爽歪歪,这样就不用一个个的去导入对应的头文件了,而是直接通过vcName去生成对应的viewController,岂不美哉?
    But,类的反射机制大家也看到了,它只能生成对应的VC对象,但是我们的界面不可能全部都是不需要传入任何参数的,他们有可能会是这样

    传Model 传字典 传数组
    像这种界面我们怎么在不引用他们头文件的话去给属性赋值呢,这就需要请出我们今天的主角KVCruntime了,这种情况对于它们来说可是小case呦。
    runtime可以帮助我们获取到这个类的所有你想要的(属性,方法,代理)
    KVC可以帮我们直接赋值,是不是很方便?
    KVC赋值 runtime获取所有属性
    这样我们就可以在不导入这个ViewController头文件的情况下来生成这个VC的实例对象,从而执行push操作了,当然了为了方便使用,小编对其进行了一点简易的封装
    manager头文件
    manager.m 这里是我们的使用方法
    dataSource赋值 使用方法
    虽然代码写的很垃圾,但是用起来个人感觉还是有一点点方便的,起码这样类中就再也不用把所有用到的viewController的头文件导入,也不用发愁当九宫格内的布局发生改变时而去一个个的调整didSelectRowAtIndexPath方法了,岂不是有点小爽吗?
    最后再贴上Demo的地址:万能跳转Demo

    相关文章

      网友评论

          本文标题:iOS利用Runtime实现万能界面跳转

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