为什么设置UITableViewCell的颜色在“willDisplayCell”中工作,而不是在“cellForRowAtIndexPath”中?

时间:2011-10-17 23:19:55

标签: iphone ios uitableview

为什么设置UITableViewCell的颜色在willDisplayCell但不在cellForRowAtIndexPath中?

注意:

  1. 我正在使用此代码设置单元格的背景颜色:[cell setBackgroundColor:[UIColor yellowColor]];
  2. 在我将其放入方法- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
  3. 时起作用 如果我输入- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  4. 就无效

2 个答案:

答案 0 :(得分:7)

UITableViewCell的doco表示您需要在willDisplayCell:中执行此操作(摘自下面的UITableViewCell类参考)。我怀疑因为表格单元格有一个内容视图和各种其他组件似乎由UIKit“管理”,所以它在cellForRowAtIndexPath中设置之后用背景颜色做自己的事情。您还可以使用表格视图单元格的“backgroundView”属性来控制其背景。

文档摘录:

注意:如果要更改单元格的背景颜色(通过backgroundColor声明的UIView属性设置单元格的背景颜色),则必须在委托的tableView:willDisplayCell:forRowAtIndexPath:方法,而不是数据源的tableView:cellForRowAtIndexPath:。组样式表视图中单元格背景颜色的更改在iOS 3.0中具有与以前版本的操作系统不同的效果。它现在会影响圆角矩形内的区域,而不是它外面的区域。

答案 1 :(得分:0)

简单来说,cellForRowAtIndex将定义单元格中UIObject的行为(如标签,按钮,视图)。 (即背景颜色,字体样式,fontcolor)。 如果您想更改单元格的外观,则只能在willDisplayCell:forRowAtIndexPath:

中完成

此处有更多解释:https://jobs.zalando.com/tech/blog/proper-use-of-cellforrowatindexpath-and-willdisplaycell/?gh_src=4n3gxh1