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

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


iOS利用Runtime实现万能界面跳转_第1张图片
九宫格布局

iOS利用Runtime实现万能界面跳转_第2张图片
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对象,但是我们的界面不可能全部都是不需要传入任何参数的,他们有可能会是这样

iOS利用Runtime实现万能界面跳转_第3张图片
传Model

iOS利用Runtime实现万能界面跳转_第4张图片
传字典

iOS利用Runtime实现万能界面跳转_第5张图片
传数组

像这种界面我们怎么在不引用他们头文件的话去给属性赋值呢,这就需要请出我们今天的主角 KVCruntime了,这种情况对于它们来说可是小case呦。
runtime可以帮助我们获取到这个类的所有你想要的(属性,方法,代理)
KVC可以帮我们直接赋值,是不是很方便?
iOS利用Runtime实现万能界面跳转_第6张图片
KVC赋值

iOS利用Runtime实现万能界面跳转_第7张图片
runtime获取所有属性

这样我们就可以在不导入这个 ViewController头文件的情况下来生成这个VC的实例对象,从而执行push操作了,当然了为了方便使用,小编对其进行了一点简易的封装
iOS利用Runtime实现万能界面跳转_第8张图片
manager头文件

iOS利用Runtime实现万能界面跳转_第9张图片
manager.m
这里是我们的使用方法
iOS利用Runtime实现万能界面跳转_第10张图片
dataSource赋值

iOS利用Runtime实现万能界面跳转_第11张图片
使用方法

虽然代码写的很垃圾,但是用起来个人感觉还是有一点点方便的,起码这样类中就再也不用把所有用到的 viewController的头文件导入,也不用发愁当九宫格内的布局发生改变时而去一个个的调整 didSelectRowAtIndexPath方法了,岂不是有点小爽吗?
最后再贴上Demo的地址: 万能跳转Demo

你可能感兴趣的:(iOS利用Runtime实现万能界面跳转)