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

2019-04-24  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读