Xib使用之TableViewCell.xib中建立多個Cell
阿新 • • 發佈:2019-01-30
初次使用xib建立UITableviewCell的時候,我都是一個xib檔案裡,只建立一個Cell,在實際業務中,往往都是一個列表中需要用到多個不同的Cell樣式,這就需要建立N個.h .m .xib檔案。而且這些.m中的實現還差不多。
後來發現,一個.xib檔案中可以建立多個Cell,如圖:
多個Cell
這樣感覺方便多了。
具體實現:
第一步建立
先和普通建立xibCell一樣,在xib中選中左邊那個Cell,copy(command + c),然後paste(command + v).xib中就多個Cell了,O(∩_∩)O~~
多個Cell
第二步設定Identifier和程式碼使用
在程式碼中建立Cell時
if (!cell) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"TempTableViewCell" owner:self options:nil] firstObject];
}
TempTableViewCell是你的xib檔名,firstObject是第一個Cell,按順序排的。
第二個怎麼辦??
cell = [[[NSBundle mainBundle] loadNibNamed:@"TempTableViewCell" owner:self options:nil ] objectAtIndex:2];
再多依次類推哈。(提示:如果在Cell中新增手勢的話,loadNibNamed: 這個返回的陣列中會比Cell多哦,大家注意)
設定每個Cell的identifier,(identifier 隨意起的,我的規律就是類名+第幾,不要重複就行)如圖:
設定每個Cell的identifier
這樣在重用佇列中重複使用Cell的時候,能找到正確的Cell,
TempTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TempTableViewCellFirst"];
可以根據indexPath設定不同的identifier。
可以把建立Cell的過程放在Cell.m中,做成類方法,這樣不至於VC中的程式碼過多。
cell.h中:
@interface TempTableViewCell : UITableViewCell
/**
* @author god~long, 16-04-03 15:04:19
*
* 初始化Cell的方法
*
* @param tableView 對應的TableView
* @param indexPath 對應的indexPath
*
* @return TempTableViewCell
*/
+ (instancetype)tempTableViewCellWith:(UITableView *)tableView
indexPath:(NSIndexPath *)indexPath;
@end
cell.m中:
+ (instancetype)tempTableViewCellWith:(UITableView *)tableView indexPath:(NSIndexPath *)indexPath {
NSString *identifier = @"";//對應xib中設定的identifier
NSInteger index = 0; //xib中第幾個Cell
switch (indexPath.row) {
case 0:
identifier = @"TempTableViewCellFirst";
index = 0;
break;
case 1:
identifier = @"TempTableViewCellSecond";
index = 1;
break;
case 2:
identifier = @"TempTableViewCellThird";
index = 2;
break;
default:
break;
}
TempTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
cell = [[[NSBundle mainBundle] loadNibNamed:@"TempTableViewCell" owner:self options:nil] objectAtIndex:index];
}
return cell;
}
這樣VC中:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TempTableViewCell *cell = [TempTableViewCell tempTableViewCellWith:tableView indexPath:indexPath];
return cell;
}
是不是很方便呢。
設定屬性
快捷設定xib屬性:
1. 在.h或者.m中先寫好屬性,如圖:
設定屬性
2. 在xib中就可以拖拽連線屬性了,如圖:
property.gif
重點:關聯屬性的時候,你想關聯那個Cell上的屬性,需要先點選左邊Cell列表,選中該Cell,然後再拖線關聯上面的控制元件。
設定好屬性,下面就是使用了,
配置Cell
/**
* @author god~long, 16-04-03 16:04:04
*
* 配置TempCell的方法
*
* @param indexPath 對應TableView的indexPath
*/
- (void)configTempCellWith:(NSIndexPath *)indexPath;
.m中:
- (void)configTempCellWith:(NSIndexPath *)indexPath {
switch (indexPath.row) {
case 0: {
_label1.text = @"我是Label1";
_customImageView.image = [UIImage imageNamed:@"8"];
break;
}
case 1: {
_label2.text = @"我是Label2";
[_customButton setTitle:@"我是button" forState:UIControlStateNormal];
break;
}
case 2: {
_label1.text = @"我是第三個Cell的Label1";
_label2.text = @"我是第三個Cell的Label2";
break;
}
default:
break;
}
}
重點:每個Cell設定連結的屬性都是單獨處理的,沒連,在用的時候即使你用了,也設定不了。
執行效果:
執行效果
dome地址:點我點我
文/god_long(簡書作者)
原文連結:http://www.jianshu.com/p/332e1db6ebb5
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。