在我的单元格中,在indexPath的行中,我一直在使用以下代码来完成我的大部分工作,因为这就是我所教授的内容。我想知道,如果让我做这项工作,是否有必要一直使用?因为我从未发现我曾经落入其他声明。
如果让我或者只是让它进入cellForRowAtIndexPath?
,我什么时候需要使用?func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCellWithIdentifier("myCustomCell") as? myCustomCell {
} else {
return myCustomCell()
}
}
答案 0 :(得分:0)
UITableView
有两种出队模式:
dequeueReusableCell(withIdentifier:)
:表视图尝试将单元格出列。如果没有,它将尝试使用您在reuseIdentifier
注册的单元格创建一个。如果您没有注册一个单元格,它将返回nil
,让您有机会自己创建一个单元格。 这是代码中else
子句生效的地方。基本上从来没有,因为大概是你注册了一个细胞类。最有可能在故事板中(通过在检查器中设置标识符),但you can also do it in code。
dequeueReusableCell(withIdentifier:for:)
,请注意其他参数。表视图尝试使单元格出列:如果没有,它将尝试使用您使用reuseIdentifier
注册的单元格类创建一个单元格。如果你没有注册一个单元格,它就会崩溃。<强>解决方案强>
如果您可以保证a)单元格已正确注册,并且b)单元格的类型设置正确,您通常会使用第二个选项。这可以避免您遇到的确切问题:
let cell = tableView.dequeueReusableCellWithIdentifier("myCustomCell", forIndexPath: indexPath) as! myCustomCell
(但是,即使在这种情况下,使用if let
仍然完美无缺。)