|
1 | 1 | JHCellConfig |
2 | 2 | ======= |
3 | 3 |
|
4 | | -- Flexible way to build a UITableView contains different kinds of cells, super easy to modify. |
5 | | -- 一种十分灵活易变的适用于创建有多种cell的UITableView的方法,在调整不同种cell的顺序、及增删某种cell时极其方便 |
| 4 | +适用于UITableView的“蝇量级”框架。 |
| 5 | +将业务复杂度集中,减少代码量,提高可阅读性。 |
6 | 6 |
|
| 7 | +- 本类的思想,是将tableView中cell的相关逻辑集中起来, |
| 8 | +- 放到数组中管理,而不是将业务逻辑分散在各个代理方法中。 |
| 9 | +- 特别是使用基类BaseTableViewController进行转接后,具体业务vc不需要实现tableView cell相关的代理方法(header/footer除外) |
7 | 10 |
|
8 | | -本类的思想,是将tableView中cell的相关逻辑集中起来, |
9 | | -放到数组中管理,而不是将业务逻辑分散在各个代理方法中 |
| 11 | +---- |
| 12 | + |
| 13 | +如下动图,只需注释/取消注释几行代码,即可隐藏/显示对应cell,无需在多个代理方法中修改。 |
10 | 14 |
|
| 15 | + |
11 | 16 |
|
12 | 17 | ---- |
| 18 | +## 使用 |
| 19 | +1. 参照Demo,在tableVC基类BaseTableViewController中,声明一个管理cellConfig实例的可变数组如dataArray,并实现tableView的代理方法,使用cellConfig的相关方法来处理,实现“转接”。 |
| 20 | +2. 在具体业务cell中,实现JHCellConfigProtocol协议中的方法,更新界面的-(void)updateContentWithCellConfig:和获取高度+(CGFloat)cellHeightWithCellConfig:方法,分别会在tableView的cellForRow和heightForRow时调用。 |
| 21 | +3. 在具体业务vc中,根据页面需求,生成cellConfig实例并添加到dataArray中 |
| 22 | + |
| 23 | +``` |
| 24 | +for (Comment *model in self.commentDataArray) { |
| 25 | +JHCellConfig *cellConfig = [JHCellConfig cellConfigWithCellClass:[AdvanceCommentCell class] dataModel:model]; |
| 26 | +cellConfig.selectBlock = ^(JHCellConfig *selectCellConfig, UITableViewCell *selectCell) { |
| 27 | +// 点击事件 |
| 28 | +}; |
| 29 | +[self.dataArray addObject:cellConfig]; |
| 30 | +} |
| 31 | +``` |
| 32 | +4.如需刷新UI,更新dataArray后调用[tableView reloadData] |
| 33 | + |
| 34 | + |
| 35 | +---- |
| 36 | +## Tips |
| 37 | +###### 关于Nib/Xib支持 |
| 38 | +1. cell使用Nib(Xib),调用useNib或将isNib属性置为YES(默认用类名做nib文件名,如需自定义,可提前registerNib) |
| 39 | + |
| 40 | +``` |
| 41 | +JHCellConfig *cell = [JHCellConfig cellConfigWithCellClass:[ListTableViewCell class] dataModel:model].useNib; |
| 42 | +``` |
| 43 | + |
| 44 | + |
| 45 | +###### 关于cell的生成(复用) |
| 46 | +1. 生成/复用cell时会自动调用更新UI的方法 |
| 47 | +2. cell重用ID默认使用类名,想自定义可以使用cellConfig.reuseID属性 |
| 48 | + |
| 49 | +###### 关于cell的高度 |
| 50 | +1. 建议仿照Demo,在Cell.m中实现+ (CGFloat)cellHeightWithCellConfig:协议方法,在此方法中返回cell高度 |
| 51 | +2. 如cell为固定高度,也可使用cellConfig.constantHeight属性,会优先使用。(个人不建议,会导致代码风格不统一,不易阅读) |
| 52 | +3. 新增高度自动计算特性,可根据约束自动计算cell高度(参照FDTemplateLayoutCell) |
| 53 | + |
| 54 | +``` |
| 55 | +#import "JHCellConfig+DynamicHeight.h" |
| 56 | +// 返回cell高度 |
| 57 | ++ (CGFloat)cellHeightWithCellConfig:(JHCellConfig *)cellConfig |
| 58 | +{ |
| 59 | +// 自动计算 |
| 60 | +return [cellConfig dynamicHeightCalResult]; // 简易方法,会自动缓存计算结果 |
| 61 | +
|
| 62 | +// 完整方法 |
| 63 | +// return [cellConfig dynamicHeightWithConfiguration:^(id cell) { |
| 64 | +// // 在此block可在高度计算前对cell进行操作,会在updateContentWithCellConfig:后执行 |
| 65 | +// // do something |
| 66 | +// } |
| 67 | +// identifier:nil // 指定reuseId,默认为cell类名 |
| 68 | +// usingCache:NO];// 可设置为不缓存计算结果 |
| 69 | +
|
| 70 | +} |
| 71 | +``` |
| 72 | +4. 使用高度自动计算时,如需不缓存高度,请使用上面的“完整方法”来计算高度,并且usingCache:传NO |
| 73 | + |
| 74 | +###### 关于cell的点击事件 |
| 75 | +1. 提供了selectBlock属性来处理点击事件,需在tableView didSelectCell时调用(建议参照Demo在基类处理) |
13 | 76 |
|
14 | | -如下动图,只需注释/取消注释几行代码,即可隐藏/显示对应cell,无需在多个代理方法中修改。 |
15 | 77 |
|
16 | | - |
|
0 commit comments