适当的地方更新UITableViewCell内容
我总是更新tableView:cellForRowAtIndexPath:
的UITableViewCell
内容tableView:cellForRowAtIndexPath:
像这样:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell:UITableViewCell = self.resultsTableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell! // update cell content cell.backgroundColor = UIColor.clearColor() cell.textLabel?.text = myTextString return cell }
该文档还显示了在tableView:cellForRowAtIndexPath:
中更新的内容tableView:cellForRowAtIndexPath:
. 但是,今天我读了
必须在显示之前设置单元格的内容。 我们不关心使用哪个单元对象。 我们关心的是它在传递给渲染器时有正确的东西显示。 因此,设置单元格内容的正确位置是
tableView:willDisplayCell:forRowAtIndexPath:
在同一篇文章中提到了这个的原因。 它谈到了
…滚动表时自定义单元格似乎“随机更改内容”的问题。 发生这种情况的原因是因为单元格的内容是在
tableView:cellForRowAtIndexPath:
方法中设置的,这不是正确的地方。 在此方法中,系统只需要获取单元对象。 一旦显示一个单元格,系统将不会询问单元格对象,直到它丢失(即单元对象被销毁时),并且无法找到重用的单元格。 但是,如果找到替代品,则会重复使用,您最终会看到该重复使用的单元格的内容代替原始单元格。
那是对的吗? 我之前从未注意到过这个问题,但是我应该在tableView:willDisplayCell:forRowAtIndexPath:
更新我的单元格内容tableView:willDisplayCell:forRowAtIndexPath:
? 我被文档误导了吗?
声明是错误的。
滚动表时,自定义单元格似乎“随机更改内容”
只有在
-
dequeueReusableCellWithIdentifier
在cellForRowAtIndexPath
之外使用(mis)。 - 单元格的整个内容未被可靠地设置为
cellForRowAtIndexPath
内的已定义状态。 - 在
cellForRowAtIndexPath
之外操作单元格的内容。
强烈建议开发人员不要使用这三种情况中的任何一种。
因此,提供单元格并更新cellForRowAtIndexPath
的内容完全没问题。
PS:我想willDisplayCell:forRowAtIndexPath:
是来自macOS中基于单元格的 NSTableView
的遗留方法,其中数据源委托方法不支持更改单元格的外观。