由于业务特殊大部分业务需求都是配置累页面同一个页面cell
种类特别多所以同事封装了一套框架来简化开发,学习了一下,然后自己总结改动了一个简化版,改动了section
和cellModel
以及headerView
的实现方式
正常我们在开发中用tableView
时,每一个vc
都会有一个tableView
且都需要实现dataSource、delegate
正常数据到显示要通过以下方式传递:
- 数据传递到
vc
(或者直接在vc
请求) vc
实现tableView
的delegate
cellForRowAtIndexPath
方法找出对应data
传递到cell
cell
填充数据展示- 一般我们
cell
会持有data
然而如果cell
样式过多:
然而如果data
结构和cell
样式都过多:
问题:
- 每一个
vc
都实现tableView
代理的代码重复 - 界面
cell
样式和数据结构多的时候会导致cellForRowAtIndexPath
里很多胶水代码 cell
持有model
,不同业务模块的相同样式cell
会出现业务model
依赖
解决方案:
- 提供
manager
类来管理代理HHTableViewManager
,所有vc
只需要创建一个manager
对象
|
|
- 为每一个
cell
提供与之对应的cellModel
就相当于vc
的viewModel
cellModel
与cell
绑定(HHCellViewModelProxy
),同时暴露cell
可操作的属性及交互给调用方,cell
实现协议(HHCellViewProxy
),来实现数据传递
|
|
|
|
- 提供
section
来管理cellModel
(HHSectionProxy
)的增删(可以把它当成一个Array
)
|
|
manager
管理section
的增删
最终:manager
会在cellForRow
里找到section
找到cellModell
找到cell
|
|
最后我们创建页面的代码
cell
和cellModel
是不依赖业务的,我们可以把他们放在统一的一个组件库里