如何使用UITableViewController在单元重用方面的新行为初始化单元格

时间:2014-07-17 15:10:45

标签: ios uitableview

我已经有一段时间没有对iOS编码了,而且我正在目睹一些新的行为,并想知道它是如何运作的。

过去cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]会返回或不的单元格,但我现在看到的代码示例缺少初始化部分:

if (cell == nil) {
    cell = [MyCellClass new];//and I think somehow registering the cell with the identifier
    //Some code here, for example:
    //[cell.button addTarget:self action:@selector(buttonPressedAction:) forControlEvents:UIControlEventTouchUpInside];
}

是否每次都要进行这些初始化,而不检查是否存在单元格?

编辑:有关我的用例的更多详细信息: 我的单元格有一个Nib文件,我在我的[[self tableView] registerNib:[UINib nibWithNibName:@"cell" bundle:nil] forCellReuseIdentifier:@"cell"] ViewController中使用了新的viewDidLoad。我的ViewController在任何Nib / StoryBoard中都不存在。

2 个答案:

答案 0 :(得分:1)

使用registerNib:forCellWithReuseIdentifier:时,会自动创建单元格。

来自docs

  

在调用集合视图的 dequeueReusableCellWithReuseIdentifier:forIndexPath:方法之前,必须使用此方法或 registerClass:forCellWithReuseIdentifier:方法告诉集合视图如何创建给定类型的新单元格。如果指定类型的单元格当前不在重用队列中,则集合视图将使用提供的信息自动创建新的单元格对象。

答案 1 :(得分:1)

dequeueReusableCellWithIdentifier:forIndexPath:保证返回一个单元格,并且一直都是(它已在iOS 6中添加)。

您记得在iOS 6之前使用的dequeueReusableCellWithIdentifier:,它没有相同的保证。使用新API更好:)