如何为不同类型的单元重用UITableViewCell

时间:2017-08-09 13:14:04

标签: ios uitableview

我有一个UITableView,其中包含不同类型的单元格。常见的方法是使用不同的UITableViewCell并根据数据对象重复使用它们。

现在,我有9种不同类型的数据对象。但我的观点类似于带有按钮,评论按钮,用户图像和用户名的Facebook Feed视图。只有中心视图会根据数据对象发生变化。

我的问题是,我是否应该为这些元素使用9种不同类型的单元格,或者我应该使用一个单元格并在创建单元格时添加中心视图?

目前我的方法是使用一个单元格并添加中心视图。如果我们遵循这种方法,UITableViewCell会被重复使用吗?

1 个答案:

答案 0 :(得分:1)

如果使用reuseIdentifier:初始化单元格并在表格视图上使用dequeueReusableCellWithIdentifier:方法,则将始终重用表格视图单元格。

至于是否使用单个UITableViewCell子类或几个子类,它取决于您的9种内容类型之间的差异程度。如果它们都包含相同的UI元素,则使用1个子类是有意义的。否则,只要为每个子类传入不同的唯一标识符,就可以创建多个子类并仍然使用dequeueReusableCellWithIdentifier:重用单元格。每个子类都将被独立重用。

如果您使用多个单元格类,那么cellForRowAtIndexPath:就是这样的:

NSString *primaryCellID = @"PrimaryCellID";
NSString *secondaryCellID = @"SecondaryCellID";

if (someCondition) {
    CustomTableViewCell1 *cell = [tableView dequeueReusableCellWithIdentifier:primaryCellID];

    if (!cell) {
        cell = [[CustomTableViewCell1 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:primaryCellID];
    }

    return cell;
}
else {
    CustomTableViewCell2 *cell = [tableView dequeueReusableCellWithIdentifier:secondaryCellID];

    if (!cell) {
        cell = [[CustomTableViewCell2 alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:secondaryCellID];
    }

    return cell;
}