不一样的TableView代码结构
2017-05-07 本文已影响49人
摸着石头过河_崖边树
前言##
有时候,你是不是和我有同样的疑惑,为什么只要用到tableView的地方就总是要写什么数据源方法,每次都写同样的代码,是不是感觉生活好枯燥?
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView,
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
次次写,其实这样增加了我们的代码数量(然并没有什么质量),想想应该怎么改进呢?
我们有时候会有这样的需求:一个页面展示许多数据。当考虑用tableView做的时候,大多数每个cell样式又不同且不能共用,如果采取每个cell自定义又会使VC代码增多,如果不用tableView,那是中间又有几个可以共用的cell,这个时候怎么做才可以呢?
自定义tableView的数据源####
第一个问题我们可以采用自定义数据源类来优化。
分析:这个数据源应该需要传入什么参数?参数1:模型数组(一个模型包括,组头标题,组尾标题,每组的模型数组)
@interface LZBArrayDataSourceSectionObject :NSObject
@property (nonatomic, copy) NSString *headerTitle; //头部标题
@property (nonatomic, copy) NSString *footerTilte; //底部标题
@property (nonatomic, strong) NSMutableArray *items; //每组模型数组
@end
参数2:每组注册cell的ID的数组,(注意数组的cellID的顺序)
参数3:block,block里面需要确定每组cell的真实类型,cell模型赋值
self.dataSource = [[LZBArrayDataSource alloc]initWithSectionItems:self.sectionArray cellIdentifiers:@[nomalCellID,LZBScaleTableViewCellID] configCellBlock:^(id cell, id item, NSInteger section) {
if(section == 0)
{
UITableViewCell *callBackCell = (UITableViewCell *)cell;
LZBScaleCellModel *model = (LZBScaleCellModel *)item;
callBackCell.textLabel.text = model.title;
}
else
{
LZBScaleTableViewCell *callBackCell = (LZBScaleTableViewCell *)cell;
LZBScaleCellModel *model = (LZBScaleCellModel *)item;
callBackCell.model = model;
}
}];
详情可以下载代码查看:
代码地址:不一样的tableView代码结构
继承结构的tableView的模块代码结构#####
针对第二种需求:tableView的大多数cell不一样或者不同的控制器都用相同的cell结构UI,采用基类模板的思想,这个就是简单的继承基本思想,但是应用很广泛,这里不做详细讲解,详情可下载代码查看:
代码地址:不一样的tableView代码结构
最后赠言###
如果觉得文章对您有帮助,不要忘记star哦!😝,star 是对程序猿最大的鼓励!