iOS开发专题

不一样的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 是对程序猿最大的鼓励!

上一篇下一篇

猜你喜欢

热点阅读