如果在tableView:cellForRowAtIndexPath中设置,则cell.backgroundColor不响应

时间:2012-01-12 01:03:02

标签: ios cocoa-touch uitableview background-color

我正在尝试用红色为某些表格着色,所以我尝试添加

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
... init Code here
cell.backgroundColor = [UIColor redColor];
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

附件检查标记出现但不是红色。

我后来发现通过将它放在tableView:willDisplayCell中它可以工作。这是设计的吗?为什么它忽略了我在初始化单元格时已设置的值?

2 个答案:

答案 0 :(得分:3)

单元格外观在tableView:willDisplayCell中自定义。所以,回答你的问题,是的,它是设计的。需要在contentView中修改/分配单元cellForRowAtIndexPath的附件视图和子视图。

来自tableView:willDisplayCell:forRowAtIndexPath:的文档:

表视图在使用单元格绘制行之前将此消息发送到其委托,从而允许委托在显示之前自定义单元格对象。此方法为委托提供了覆盖表视图前面设置的基于状态的属性的机会,例如选择和背景颜色。委托返回后,表视图仅设置alpha和frame属性,然后仅在行滑入或滑出时为其设置动画。

答案 1 :(得分:1)

仅供参考,Ravi的回答是正确的,但如果您想简化实施,您也可以设置单元格的contentView背景颜色以达到同样的效果。

cell.contentView.backgroundColor = [UIColor redColor];

这不是文档化的解决方案,但以下方法可行:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
... init Code here
    cell.contentView.backgroundColor = [UIColor redColor];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
}