如何在iphone上的UITableView中设置单元格的背景颜色?

时间:2009-05-22 17:57:24

标签: iphone objective-c

如何在UITableView中设置单元格的背景颜色?

感谢。

7 个答案:

答案 0 :(得分:11)

我知道这是一个老帖子,但我相信有些人仍在寻求帮助。您可以使用它来设置单个单元格的背景颜色,最初有效:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
     [cell setBackgroundColor:[UIColor lightGrayColor]];

然而,一旦你开始滚动,iphone将重复使用不同背景颜色的单元格(如果你试图替换它们)。您需要调用tableView:willDisplayCell:forRowAtIndexPath。这样,在加载重用标识符之前设置背景颜色。你可以这样做:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
     cell.backgroundColor = ([indexPath row]%2)?[UIColor lightGrayColor]:[UIColor whiteColor];
}

最后一行只是一个浓缩的if / else语句。祝你好运!

答案 1 :(得分:2)

<强>更新

显然,现有的UITableViewCell框架很难改变单元格的背景颜色,并且通过所有状态更改(编辑模式等)使其运行良好。

已在this SO question发布了一个解决方案,并且它正在几个论坛上被称为“Apple工程师批准的唯一解决方案”。它涉及子类化UITableViewCell并为子类化单元格的backgroundView属性添加自定义视图。

原帖 - 此解决方案无法正常运行,但在某些情况下可能仍然有用

如果您已经拥有UITableViewCell对象,只需更改其contentView的{​​{1}}属性。

如果您需要使用自定义背景颜色创建UITableViewCells,则该过程会稍长一些。首先,您需要为UITableView创建数据源 - 这可以是实现backgroundColor协议的任何对象。

在该对象中,您需要实现UITableViewDataSource方法,该方法在给定表中单元格位置的NSIndexPath时返回UITableViewCell。创建该单元格时,您需要更改其tableView:cellForRowAtIndexPath:的{​​{1}}属性。

不要忘记将UITableView的backgroundColor属性设置为数据源对象。

有关详情,请参阅以下API文档:

请注意,所有这三个链接都需要注册为Apple开发人员。

答案 2 :(得分:0)

backgroundView一直在底部。它是显示圆角和边缘的那个。你想要的是位于backgroundView之上的contentView。它涵盖了细胞通常的白色区域。

答案 3 :(得分:0)

这对我很有用:

NSEnumerator *enumerator = [cell.subviews objectEnumerator];
id anObject;
while (anObject = [enumerator nextObject]) {
    if( [anObject isKindOfClass: [ UIView class] ] )
        ((UIView*)anObject).backgroundColor = [UIColor lightGrayColor];
}

答案 4 :(得分:0)

我写的版本将在iPhone 3.0或更高版本中运行,否则将回退到白色背景。

viewDidLoad的{​​{1}}方法中,我们添加以下内容:

UITableViewController

在创建单元格时(在我的代码中这是我的self.view.backgroundColor=[UIColor clearColor]; // Also consider adding this line below: //self.tableView.separatorColor=[UIColor clearColor]; )添加以下代码:

tableView:cellForRowAtIndexPath:

答案 5 :(得分:0)

您可以设置backgroundColor的{​​{1}}。如果backgroundView不存在,您可以为其创建一个。

backgroundView

答案 6 :(得分:0)

如果要将单元格的背景设置为图像,请使用以下代码:

    // Assign our own background image for the cell
UIImage *background = [UIImage imageNamed:@"image.png"];
UIImageView *cellBackgroundView = [[UIImageView alloc] initWithImage:background];
cellBackgroundView.image = background;
cell.backgroundView = cellBackgroundView;