当我使用自定义单元格创建表格视图时,我使用此
static NSString *CellIdentifier = @"mycell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
它工作正常(我使用故事板和ARC)
但有时候我会看到这个控件:
if (!cell){
//here the alloc of a custom cell
}
我应该只在我有自己的类的自定义单元格时才使用它吗?如果我使用故事板,我需要它吗?感谢
答案 0 :(得分:1)
dequeueReusableCellWithIdentifier:forIndexPath:
将引发异常。因此检查细胞是否为零是没有意义的。在此次通话后,单元格无法为零。您将拥有一个有效的单元格或引发异常。
这意味着您必须注册一个单元格(通过故事板或代码)才能使此调用正常工作。
第二种(或旧的)方法是将单元格dequeueReusableCellWithIdentifier:
出列,而不使用forIndexPath:
。这是我们在早期版本中无法注册单元格的方式。如果没有为标识符注册单元格,则此方法将返回nil,并且您必须在代码中创建单元格。
我会坚持注册单元格和dequeueReusableCellWithIdentifier:forIndexPath:
。在这种情况下,您不需要if (!cell)
部分。例外情况将确保您不要忘记注册您的单元格。
答案 1 :(得分:0)
如果您使用故事板,请使用原型单元格。在本教程中,有一个关于原型单元格的整个部分:http://www.raywenderlich.com/50308/storyboards-tutorial-in-ios-7-part-1
答案 2 :(得分:0)
如果您使用带有故事板的原型单元格,那么您将永远不会进入if
声明,因此您不需要它。否则你会这样做,例如当你从xib
文件中实例化单元格时,你会在if
语句中执行此操作。
答案 3 :(得分:0)
如果我们使用storyboard,则没有必要。请查看此链接
http://useyourloaf.com/blog/2012/06/07/prototype-table-cells-and-storyboards.html