1. 程式人生 > >Xib使用之TableViewCell.xib中建立多個Cell

Xib使用之TableViewCell.xib中建立多個Cell

初次使用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
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。