什么是 - [UITableViewDelegate willDisplayCell:forRowAtIndexPath:] for?

Gre*_*tic 47 iphone uitableview

在我的所有UITableView编程中,我总是配置我UITableViewCells的 - [UITableViewDataSource tableView:cellForRowAtIndexPath:].现在我遇到了 - [UITableViewDelegate willDisplayCell:forRowAtIndexPath:]方法.这似乎也是进行单元配置的合适场所.

我的问题是:这两种方法之间适当的"分工"是什么?我应该在一对一中做什么?

Jas*_*oco 40

您可以使用它来配置字体和文本颜色等内容.在较新版本的iPhone中,对于某些表格配置,如果您在tableView:cellForRowAtIndexPath:方法中配置标签文本颜色等内容,则在实际显示单元格之前的某个时刻您的更改将会丢失.在这里,您可以执行更改标签颜色,调整背景突出显示等操作.

  • 谢谢.有没有理由说明为什么在tableView:cellForRowAtIndexPath:中对单元格进行更改可能会"丢失"?我想知道在失去的东西和不会失去的东西之间的界限. (10认同)
  • 除非在willDisplayCell中执行,否则肯定会失败的一件事:forRowAtIndexPath:是textLabel或detailedTextLabel上的backgroundColor属性.如果在cellForRowAtIndexPath:方法中设置它们,该属性将在实际显示之前重置为tableView的背景颜色(但即便如此,仅在标准表视图中). (6认同)
  • 我不知道.我甚至不知道这是存在的,直到我们为3.0 SDK构建时突然发生一系列标签更改停止工作(即便如此,仅在非常特定的表配置中).当我们对此进行窃听时,我们回来了"按预期工作:使用willDisplayCell:forRowAtIndexPath:为此.没有提供任何其他解释;) (3认同)
  • 实际上,在思考更多内容时,你可能应该在这里做与显示相关的事情,并在另一方面做与内容相关的/单元格初始化事情. (3认同)
  • 我将NSAttributedString应用于单元格中的属性UILabel时遇到了问题.我在`cellForRowAtIndexPath`中设置了标签的属性文本,在绘制单元格之前,属性会以某种方式丢失.当我把这个作业转移到`willDisplayCell`时,它终于奏效了.试图弄清楚我做错了多少时间.我希望在文档中更好地解释或警告这种行为. (3认同)