我一直在更新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
}
documentation还会在tableView:cellForRowAtIndexPath:
中显示正在更新的内容。但是,今天I read
必须在显示之前设置单元格的内容。我们不关心使用哪个单元对象。我们关心的是它在传递给渲染器时有正确的东西显示。因此,设置单元格内容的正确位置是
tableView:willDisplayCell:forRowAtIndexPath:
the same post中提到了这个原因。它谈到了
...滚动表时自定义单元格显示为“随机更改内容”的问题。发生这种情况的原因是因为单元格的内容是在
tableView:cellForRowAtIndexPath:
方法中设置的,这不是正确的地方。在此方法中,系统只需要获取单元对象。一旦显示一个单元格,系统将不会要求单元格对象,直到它丢失它(即当单元格对象被销毁时)并且找不到重新使用的单元格。但是,如果找到替代品,则会重复使用,您最终会看到该重复使用的单元格的内容代替原始单元格。
这是对的吗?我之前从未注意到过问题,但是我应该更新tableView:willDisplayCell:forRowAtIndexPath:
中的单元格内容吗?我被文件误导了吗?
答案 0 :(得分:1)
陈述是错误的。
当滚动表时,自定义单元格似乎“随机更改内容”
仅在
时发生dequeueReusableCellWithIdentifier
在cellForRowAtIndexPath
之外使用(误)。cellForRowAtIndexPath
内的已定义状态。cellForRowAtIndexPath
之外操纵单元格的内容。 强烈建议开发人员不要使用这三种情况中的任何一种。
因此,提供单元格并更新cellForRowAtIndexPath
中的内容完全没问题。
PS:我猜willDisplayCell:forRowAtIndexPath:
是来自macOS中基于单元格 NSTableView
的遗留方法,其中数据源委托方法不支持更改细胞的外观。