UITableView-01基本使用
UITableView-02模型优化
UITableView-03复杂的Plist解析
UITableView-04常见属性和样式
UITableView-05可重复使用Cell-有限的创建新的cell
UITableView-06可重复使用cell-注册方式
UITableView-07索引条(综合小案例)
UITableView-08自定义等高的cell-纯代码frame方式
UITableView-09自定义等高的cell-Masonry方式
xib方式自定义cell,不需要代码方式创建子控件和子控件的位置和大小.(在xib里面直接设置好,就可以)
需注意:
-
initWithStyle: reuseIdentifier:
此方法是不会调用xib文件得,无法创建xib
方式的cell.
[[XXCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
-
[registerClass: forCellReuseIdentifier:]
,注册方式创建cell,其本质还是initWithStyle:...
方法.无法调取xib文件.
如何创建xib方式的cell呢?
第一种:
-
设置cell的可重用标示.
直接在xib中设置,可重用标示
- 调用xib文件,创建对应的cell.
loadNibNamed: owner: options:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
//通过可重用标示,去缓存池获取对应cell.
GroupBuyCell *cell = [tableView dequeueReusableCellWithIdentifier:@"tg"];
if(cell == nil){
cell = [[[NSBundle mainBundle]loadNibNamed:NSStringFromClass([GroupBuyCell class]) owner:nil options:nil] lastObject];
}
cell.groupBuy = self.tgData[indexPath.row];
return cell;
}
第二种:
- 使用代码注册方式,给xib注册可重用标示.
registerNib: forCellReuseIdentifier:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([GroupBuyCell class]) bundle:nil] forCellReuseIdentifier:ID];
}
- 缓冲池取对应cell,没有则通过注册方法创建新的cell.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
GroupBuyCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
cell.groupBuy = self.tgData[indexPath.row];
return cell;
}
不同类型的cell -- 共存
举例: 双十一时,想要做活动,在cell里面插个广告!
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.rowHeight =100;
//两个注册xib可重用标示(2个不同的自定义cell类型)
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([GroupBuyCell class]) bundle:nil] forCellReuseIdentifier:ID];
[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([TestCell class]) bundle:nil] forCellReuseIdentifier:testID];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return self.tgData.count+1; // 显示的行 +1.
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.row == 0){ // 插入广告
TestCell *cell = [tableView dequeueReusableCellWithIdentifier:testID];
return cell;
}else{
GroupBuyCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
cell.groupBuy = self.tgData[indexPath.row-1]; //对应的数据 -1
return cell;
}
}
网友评论