之前的四篇是基于蘑菇街的组件化学习,今天研究的是LDBusMediator的组件化之路。
目标:
主工程 -FirstVC-SecondVC-ThirdVC
第一步,新建一个项目,项目内容 FirstVC-SecondVC-ThirdVC的跳转。
第二步,新建一个项目,将第一步的FirstVC-SecondVC-ThirdVC的文件导入。
第三步,新建一个继承于NSObject的QKProjectProtocol。
QKProjectProtocol.h
![](https://img.haomeiwen.com/i711728/9c99bd14dbb7c486.png)
QKProjectProtocol.m中不实现这两个方法,为啥?下一步见晓。
第四步,新建一个继承于QKProjectProtocol的ProjectAProtocol:
ProjectAProtocol.h
![](https://img.haomeiwen.com/i711728/b842e449cb547809.png)
ProjectAProtocol.m
![](https://img.haomeiwen.com/i711728/3a7b4d9bcc5aaebf.png)
![](https://img.haomeiwen.com/i711728/d54522fb7e0d229b.png)
![](https://img.haomeiwen.com/i711728/95c409f70c0b2e73.png)
![](https://img.haomeiwen.com/i711728/a7347e16678acba7.png)
![](https://img.haomeiwen.com/i711728/c22f755d504d3cfd.png)
这个ProjectAProtocol到底干了什么事情:
1 将Protocol注册到Mediator(具体是什么,移步下一步)
2 硬编码,使用Key-Value的形式,保存URL.host-ViewController
3 判断当前Protocol是否能打开某个URL
4 打开传入的URL,从默认注册表中获取到对应URL的ViewController,然后进行传值的操作。
第五步,创建QKMediator,是一个组件协议控制中心,注意,它控制的是组件协议,也就是继承于QKProjectProtocol类的实例。
QKMediator.h
![](https://img.haomeiwen.com/i711728/86ae7161aa13b1b0.png)
QKMediator.m
![](https://img.haomeiwen.com/i711728/989928d46563bf4a.png)
![](https://img.haomeiwen.com/i711728/8d61ad421c7fbc84.png)
![](https://img.haomeiwen.com/i711728/a7969994ade3513b.png)
QKMediator的主要功能是,保存各个组件的协议,当需要打开某个URL时,前往该协议中,判断能够打开。如果可以打开,那么需要打开时,前往协议中,根据URL-ViewController注册表,得到VC,并打开。
第六步,给组件的接口VC,也就是FirstVC添加传参方法,以及处理后的回传数据方法:
![](https://img.haomeiwen.com/i711728/7e8d2d0b5e9568f5.png)
FirstVC中实现回传信息的方法:
![](https://img.haomeiwen.com/i711728/d0bf9b99f0cbd0b9.png)
第七步,调用组件的服务。
ViewController.h中没有改动。
ViewController.m:
![](https://img.haomeiwen.com/i711728/76bfefbd26403a30.png)
![](https://img.haomeiwen.com/i711728/e9c75b85b5624228.png)
关键是打开的URL了,qk365:// 这几个不重要,关键是FirstVC,这个要和ProjectAProtocol中shareProjectAProtocol方法中所注册的urlDic的Key保持一致,需要跳转哪个ViewController,就使用对应的Key。
第八步,运行
![](https://img.haomeiwen.com/i711728/8e8973c73d3f0f17.gif)
还有打印台信息:
![](https://img.haomeiwen.com/i711728/c85ad0dc28a48e1e.png)
加油~
网友评论