-
等高的自定義Cell
-
通過storyboard創(chuàng)建步驟
- 1.storyboard部分
-
在storyboard中添加需要的子控件
- 設(shè)置cell的Identifier,以供創(chuàng)建cell時(shí)使用
- 新建類并繼承UITableViewCell類
- 修改cell的class為剛剛新建的類
- 在類中新建model屬性
-
- 2.控制器部分
- 利用cell的Identifier標(biāo)識找到cell
- 給cell的模型屬性賦值
- 3.擴(kuò)展類部分
- 將storyboard中的子控件連線到擴(kuò)展類中
- 需要提供一個(gè)模型屬性嘱丢,重寫模型的set方法,在這個(gè)方法中設(shè)置模型數(shù)據(jù)到子控件上
- 1.storyboard部分
-
通過Xib創(chuàng)建步驟
-
1.Xib部分
- 同storyboard一樣澜搅,只是把子控件加入到xib中
-
2.控制器部分
- 大體同storyboard伍俘,只不過創(chuàng)建cell的方法應(yīng)改成通過xib文件創(chuàng)建
- 代碼片段
static NSString *idCell = @"first";
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:idCell];
if(cell == nil){
cell = [[[NSBundle mainBundle]loadNibNamed:@"UITableCellXib" owner:nil options:nil]lastObject];
}- 3.擴(kuò)展類部分 - 同storyboard。 - 4.細(xì)節(jié)優(yōu)化 - 在擴(kuò)展類中新建初始化方法勉躺,把創(chuàng)建cell的代碼放到該初始化方法中 - 代碼片段 ```objc +(instancetype)cellWithTable:(UITableView *)tableView
-
-
{
static NSString *idCell = @"first";
WXTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:idCell];
if(cell == nil){
cell = [[[NSBundle mainBundle]loadNibNamed:@"UITableCellXib" owner:nil options:nil]lastObject];
}
return cell;
}
```
-
5 還可以通過注冊的方式直接創(chuàng)建一個(gè)cell癌瘾,這樣在新建cell時(shí)就不用判斷cell是否為空
- 代碼片段
UINib *nib = [UINib nibWithNibName:@"UITableCellXib" bundle:nil];
[self.tableView registerNib:nib forCellReuseIdentifier:@"first"];
```
-
非等高的自定義Cell
- xib方式
- 控件布局及數(shù)據(jù)綁定方式參考等高的自定義Cell
- 不同點(diǎn)如下
1.在模型中增加一個(gè)屬性用來存放對應(yīng)Cell的高度
2.
在Cell的模型屬性set方法中調(diào)用[self layoutIfNeed]方法強(qiáng)制布局
,不調(diào)用該方法得到的Cell高度無法預(yù)估饵溅。3.在控制器中實(shí)現(xiàn)
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
方法妨退,返回一個(gè)預(yù)估高度,只要返回了估計(jì)高度蜕企,那么就會先調(diào)用tableView:cellForRowAtIndexPath:
方法創(chuàng)建cell咬荷,再調(diào)用tableView:heightForRowAtIndexPath:
方法獲取cell的真實(shí)高度-
4.建議在擴(kuò)展Cell中實(shí)現(xiàn)
awakeFromNib
方法,設(shè)置內(nèi)容label的preferredMaxLayoutWidth
屬性轻掩,以避免在Autolayout中計(jì)算高度出現(xiàn)偏差萍丐。-(void)awakeFromNib
self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 20;
}
``` - xib方式