JHCellConfig 2.2.0

JHCellConfig 2.2.0

Jason Hu 维护。



  • 作者
  • JC-Hu

JHCellConfig

Pod Version Pod Platform Pod License

pod 'JHCellConfig', '~> 2.1.0'

适用于 UITableView 的“轻量级”框架。将业务复杂度集中,减少代码量,提高可读性。

本类的思想是将 tableView 中 cell 的相关逻辑集中起来,放在数组中进行管理,而不是将业务逻辑分散在各个代理方法中。特别是使用基类 BaseTableViewController 进行转接后,具体业务 vc 不需要实现 tableView cell 相关的代理方法(除 header 和 footer 外)


如下动图,只需注释/取消注释几行代码,即可隐藏/显示对应 cell,无需在多个代理方法中修改。

image


使用

  1. 参照 Demo,在 tableVC 基类 BaseTableViewController 中,声明一个管理 cellConfig 实例的可变数组如 dataArray,并实现 tableView 的代理方法,使用 cellConfig 的相关方法来处理,实现“转接”。
  2. 在具体业务 cell 中,实现 JHCellConfigProtocol 协议中的方法,更新界面的 -(void)updateContentWithCellConfig: 和获取高度 +(CGFloat)cellHeightWithCellConfig: 方法,分别会在 tableView 的 cellForRowheightForRow 时调用。
  3. 在具体业务 vc 中,根据页面需求,生成 cellConfig 实例并添加到 dataArray
for (Comment *model in self.commentDataArray) {
JHCellConfig *cellConfig = [JHCellConfig cellConfigWithCellClass:[AdvanceCommentCell class] dataModel:model];
cellConfig.selectBlock = ^(JHCellConfig *selectCellConfig, UITableViewCell *selectCell) {
// 点击事件
};
[self.dataArray addObject:cellConfig];
}

4.如需刷新 UI,更新 dataArray 后调用 [tableView reloadData]


提示

关于 Nib/Xib 支持
  1. cell 使用 Nib(Xib),调用 useNib 或将 isNib 属性设置为 YES(默认使用类名作为 nib 文件名,如需自定义,可提前注册 Nib)
JHCellConfig *cell = [JHCellConfig cellConfigWithCellClass:[ListTableViewCell class] dataModel:model].useNib;
关于 cell 的生成(复用)
  1. 生成/复用 cell 时会自动调用更新 UI 的方法
  2. cell 的 重用 ID 默认使用类名,想自定义可以使用 cellConfig.reuseID 属性
关于cell的高度
  1. 建议按照Demo,在Cell.m中实现+ (CGFloat)cellHeightWithCellConfig:协议方法,在此方法中返回cell高度
  2. 如果cell为固定高度,也可使用cellConfig.constantHeight属性,会优先使用。(个人不推荐,会导致代码风格不统一,不易阅读)
  3. v2.1.0新增高度自动计算特性,可根据约束自动计算cell高度(参照FDTemplateLayoutCell)
#import "JHCellConfig+DynamicHeight.h"
// 返回cell高度
+ (CGFloat)cellHeightWithCellConfig:(JHCellConfig *)cellConfig
{
// 自动计算
return [cellConfig dynamicHeightCalResult]; // 简易方法,会自动缓存计算结果

// 完整方法
//    return [cellConfig dynamicHeightWithConfiguration:^(id cell) {
//        // 在此block可在高度计算前对cell进行操作,会在updateContentWithCellConfig:后执行
//        // do something
//    }
//                                           identifier:nil // 指定reuseId,默认为cell类名
//                                           usingCache:NO];// 可设置为不缓存计算结果

}
  1. 使用高度自动计算时,如果需要不缓存高度,请使用上面的“完整方法”来计算高度,并将usingCache:设置为NO
关于cell的点击事件
  1. 提供了cellConfig.selectBlock属性来处理点击事件,需在tableView didSelectRow时调用(建议参照Demo在基类处理)

最后

请多看Demo 请多看Demo 请多看Demo