无法在IB中设置UITableViewCell的背景颜色

时间:2010-11-10 02:49:26

标签: ios uitableview cocoa-touch interface-builder

我创建了一堆单元格,我在表格视图中重复使用。所有这些单元格中都有不同的UILabel s和一些UIImageView s(没有任何内容覆盖整个单元格)。

在IB中设置背景颜色无效(始终为白色或透明,不能说明其中哪一个)。但是,如果按下Command-R(模拟界面),单元格在模拟器中具有正确的背景颜色。

我尝试在tableView:cellForRowAtIndexPath:中设置它,但它不会像我想的那样工作。

这就是诀窍:

cell.contentView.backgroundColor = [UIColor redColor];

但这些没有效果(即使我将cell.contentView.backgroundColor设置为clearColor):

cell.backgroundView.backgroundColor = [UIColor redColor];

cell.backgroundColor = [UIColor redColor];

我在IB中设置了所有布局/字体/背景内容。知道为什么在这种情况下这不起作用吗?

为什么我需要修改contentView的{​​{1}}而不是backgroundColor

这似乎是一个常见问题。有人可以指出我正确的方向(最终)了解如何在表格视图单元格中处理背景颜色。

2 个答案:

答案 0 :(得分:53)

要更改单元格的背景颜色,必须使用willDisplayCell:forRowAtIndexPath:方法执行此操作。这在概述底部附近的UITableViewCell documentation中提到。所以你需要:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor redColor];  
}

contentView只是推荐自定义控件的子视图,以便在进行表格编辑时正确布置单元格。

答案 1 :(得分:1)

有一个更简单的解决方案:在Interface Builder中创建UITableViewCell时,只需拖放其他UIView即可覆盖您在IB中创建的整个UITableViewCell。将其他UI元素放在此附加UIView之上。您可以将此额外UIView设置为您喜欢的任何背景。

StackOverflow上有很多答案建议您使用如下代码行更改UITableViewCell的背景颜色:

cell.contentView.backgroundColor = [UIColor redColor];

如果通过略微调整contentView的帧大小为单元格添加阴影,您可能会发现此行会更改单元格的背景颜色和投影区域的颜色好。