整体还是用MVC设计模式,其中的M一般由两个模型类组成一个模块,V对应tableview要用到的cell,C则是tableviewController。
M:可以将tableview的数据对应成一个二维数组,二维数组中的一维数组对应每一个section,一维数组中的元素对应每一个cell。因此我们可以新建两个模型类,一个为BaseItem,它的属性对应cell中需要用到的数据如
@property (nonatomic, strong) NSString *itemIdentifier;
@property (nonatomic, strong) UIImage *itemImage;
@property (nonatomic, strong) NSString *itemTitle;
@property (nonatomic, strong) NSString *itemSubtitle;
@property (nonatomic, strong) UIImage *itemAccessoryImage;
第二个为sectionObject,用来给比如section的headertitle、footertitle赋值,其中还包含着一个数组items,保存了所有的BaseItem对象
@property(nonatomic,strong)NSString *headerTitle;
@property(nonatomic,strong)NSString *footerTitle;
@property(nonatomic,strong)NSMutableArray *items;
+ (instancetype)initWithItemArray:(NSMutableArray *)items;
V:新建一个继承自UITableViewCell的cell,为它添加一个BaseItem类型的属性,并且在setItem的方法里为自己的textLabel等赋值
- (void)setItem:(MyTableViewBaseItem *)item{
_item = item;
if (_item) {
self.textLabel.text = _item.itemTitle;
self.detailTextLabel.text = _item.itemSubtitle;
}
}
C:控制器要做的事情就是将网络请求获取到的数据转换成模型,存入二维数组中,这样通过这个二维数组就可以得到tableview代理方法所需要的数据
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return self.arrGroup.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSMutableArray *cellArr = self.arrGroup[section];
return cellArr.count;
}
在cellForRowAtIndexPath方法中只需按照cell的indexPath.section和indexPath.row所对应的数组下标把数组中的item取出并赋值给cell.item,这样cell的布局完成