2016笔记——组件化学习(二)
上一篇说了Protocol方案:
项目外壳+组件A 的实现。
ViewController-FirstVC-SecondVC-ThirdVC
这一篇拓展一下Protocol方案:
项目外壳+组件A+组件B的实现。
ViewController-FirstVC-SecondVC-ThirdVC-MondayVC
具体实现:
第一步,写一个简单的项目,项目内容是
FirstVC ->SecondVC->ThirdVC跳转。
第二步,写一个简单的项目,项目内容是MondayVC。
第三步,新建一个项目,将FirstVC、SecondVC、ThirdVC、MondayVC导入到新的项目中来。
第四步,新建一个继承于NSObject的ModuleManager,也就是组件管理中心。
第五步,新建一个继承于NSObject的CompontProtocol,也就是协议中心。
第六步,在CompontProtocol中添加ProjectAProctol以及ProjectBProtocol
![](https://img.haomeiwen.com/i711728/21be3a6a9f433f42.png)
第七步,在ModuleManager.h中添加三个方法:
![](https://img.haomeiwen.com/i711728/798a7b6c716d69ac.png)
第八步,在ModuleManager.m中实现这三个方法:
![](https://img.haomeiwen.com/i711728/68b2585a48e9e715.png)
![](https://img.haomeiwen.com/i711728/7058b12a77c7363d.png)
第九步,前往第一个节点(FirstViewController)中导入ModuleManager、CompontProtocol头文件,添加注册
FirstViewController.h
![](https://img.haomeiwen.com/i711728/28f199b274721445.png)
FirstViewController.m
![](https://img.haomeiwen.com/i711728/e2e15f2eef3a2905.png)
![](https://img.haomeiwen.com/i711728/04d517ac82f2ab23.png)
![](https://img.haomeiwen.com/i711728/c77c7032ba3c12fe.png)
![](https://img.haomeiwen.com/i711728/60fa196e5f6d889e.png)
第十步,前往第二个节点(MondayViewController)中导入ModuleManager、CompontProtocol的头文件,然后注册。
MondayViewController.m
![](https://img.haomeiwen.com/i711728/67375b0f976c0279.png)
![](https://img.haomeiwen.com/i711728/66f33977e358a374.png)
第十一步,前往ViewController中调用第一个组件。
ViewController中导入ModuleManager、CompontProtocol的头文件,然后添加按钮,按钮的点击事件中这样写:
![](https://img.haomeiwen.com/i711728/be853151f9e0aeed.png)
第十二步,前往第一个组件的ThirdViewController中,调用第二个组件:
ThirdViewController.m:
![](https://img.haomeiwen.com/i711728/761fed929ef2d7bc.png)
![](https://img.haomeiwen.com/i711728/6af448e47be8d730.png)
![](https://img.haomeiwen.com/i711728/8f4aa49ba2252b67.png)
ViewController-FirstVC-SecondVC-ThirdVC
ViewController-FirstVC-SecondVC-ThirdVC-MondayVC
其实二者相比,就只是多了这么几步:
1 导入项目B的文件
2 在协议中心添加新的协议B和方法
3 将项目B的接口文件(MondayVC)注册到组件管理中心
4 在项目B的接口文件(MondayVC)中实现协议B的方法
5 在调用项目B的地方(ThirdVC)通过组建管理中心获得到项目B的接口文件(MondayVC),调用B协议方法实现服务。
最后就是运行了:
![](https://img.haomeiwen.com/i711728/01d857385527e9c9.gif)
看看打印台的信息:
![](https://img.haomeiwen.com/i711728/576311ff58cd80a7.png)
完全无压力~嘿嘿。
最后上一个流程梳理图:
![](https://img.haomeiwen.com/i711728/0c8b0aa741450e9a.png)
然后我用语言表述一下:
1 新建继承于NSObject的ModuleManager,然后添加两个方法:注册方法和获取方法。
注册方法:传入protocol和class,然后生成protocol-class的注册表。
获取方法:传入protocol,返回class。
2 新建继承于NSObject的CompontProtocol,添加协议A,定义协议的方法。
3 在组件A中的接口VC也就是FirstVC中,导入CompontProtocol,实现协议A的方法。接着调用ModuleManager的注册方法。
4 调用时,在ViewController中,导入ModuleManager和CompontProtocol的头文件,然后调用ModuleManager的获取方法,传入协议A即可获得到FirstVC,然后执行协议A的方法即可调用组件A的服务。
5 多个组件时,定义多个协议,并在组件中提供服务的VC中导入CompontProtocol和ModuleManager头文件,实现协议,然后调用ModuleManager的注册方法。使用时,导入ModuleManager和CompontProtocol的头文件,传协议名获取class即可。
加油~~