我已经有一段时间没有对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中都不存在。
答案 0 :(得分:1)
使用registerNib:forCellWithReuseIdentifier:
时,会自动创建单元格。
来自docs:
在调用集合视图的 dequeueReusableCellWithReuseIdentifier:forIndexPath:方法之前,必须使用此方法或 registerClass:forCellWithReuseIdentifier:方法告诉集合视图如何创建给定类型的新单元格。如果指定类型的单元格当前不在重用队列中,则集合视图将使用提供的信息自动创建新的单元格对象。
答案 1 :(得分:1)
dequeueReusableCellWithIdentifier:forIndexPath:
保证返回一个单元格,并且一直都是(它已在iOS 6中添加)。
您记得在iOS 6之前使用的dequeueReusableCellWithIdentifier:
,它没有相同的保证。使用新API更好:)