是否可以在一个xib中创建多个单元格?

时间:2015-12-29 03:23:31

标签: ios objective-c uitableview

我发现它可以用不同的xib创建不同的单元格,但我想知道是否可以在一个xib中创建不同的单元格?如果可能的话,我该怎么办呢?

 here

这是代码,我知道这是错误的代码,所以你们可以帮我解决一下吗?

- (void)viewDidLoad {
    [super viewDidLoad];

    [imageTableView registerNib:[UINib nibWithNibName:@"ImageTableViewCell" bundle:nil] forCellReuseIdentifier:@"oneImageTableViewCell"];
    [imageTableView registerNib:[UINib nibWithNibName:@"ImageTableViewCell" bundle:nil] forCellReuseIdentifier:@"twoImageTableViewCell"];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *identifier1 = @"oneImageTableViewCell";
    NSString *identifier2 = @"twoImageTableViewCell";
    if (indexPath.row % 2 == 0) {
        ImageTableViewCell *cell = [imageTableView dequeueReusableCellWithIdentifier:identifier1 forIndexPath:indexPath];
        return cell;
    } else {
        ImageTableViewCell *cell = [imageTableView dequeueReusableCellWithIdentifier:identifier2 forIndexPath:indexPath];
        return cell;
    }
}

1 个答案:

答案 0 :(得分:3)

我的第一个想法是不去做。但是,如果我必须这样做,我想我会尝试使用旧式出列来构建单元格,并通过从笔尖手动提取它们来构建可重用单元的初始池。

所以,不要进行任何细胞笔或细胞类注册,然后在cellForRowAtIndexPath中......

NSString *identifier;
NSInteger index;
if (indexPath.row % 2 == 0) {
    identifier = @"oneImageTableViewCell";
    index = 0;
} else {
    identifier = @"twoImageTableViewCell";
    index = 1;
}
UITableViewCell *cell =  [tableView dequeueReusableCellWithIdentifier:identifier];
if (!cell) {
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ImageTableViewCell" owner:self options:nil];
    cell = topLevelObjects[index];
}
return cell;