iOS UITableView:更改表格的背景颜色会覆盖单元格的背景颜色

时间:2013-03-29 22:33:52

标签: ios objective-c xcode uitableview

我有一个问题,即设置tableView的背景颜色会覆盖我为单个单元格设置的背景颜色。更具体地说,我有一个包含3行的表:顶部单元格为深灰色,底部2单元格为红色:

http://imgur.com/otYlFMx,LvoLDzY,tXiJenw#0

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIColor *sectionBackgroundColor = [UIColor colorWithRed:0.09f green:0.09f blue:0.09f alpha:1.0];
    UIColor *menuItemBackgroundColor = [UIColor redColor];

    if (indexPath.row == 0) {
        cell.backgroundColor = sectionBackgroundColor;
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.text = @"MENU";
        cell.textLabel.font= [UIFont systemFontOfSize:16.0];
        cell.selectionStyle = false;
    } else if (indexPath.row == 1) {
        cell.backgroundColor = menuItemBackgroundColor;
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.text = @"Schedule";
        cell.textLabel.font= [UIFont systemFontOfSize:18.0];
        cell.imageView.image = [UIImage imageNamed:@"Schedule.png"];
    } else if (indexPath.row == 2) {
        cell.backgroundColor = menuItemBackgroundColor;
        cell.textLabel.textColor = [UIColor whiteColor];
        cell.textLabel.text = @"Contacts";
        cell.textLabel.font= [UIFont systemFontOfSize:18.0];
        cell.imageView.image = [UIImage imageNamed:@"Contacts.png"];
    } else {
        cell.backgroundColor = [UIColor blackColor];
        cell.selectionStyle = false;
    }

}

我正在尝试做的是让底部黑色的所有空白,未使用的白色单元格。根据我的研究,设置tableView背景颜色就可以了:

http://imgur.com/otYlFMx,LvoLDzY,tXiJenw#1

tableView.backgroundColor = [UIColor blackColor];

然而,正如您所注意到的,这行代码也将前两个单元格的背景颜色更改为黑色。我玩了更多,并注意到一般模式,每个单元格背景颜色将变为黑色,除了最后一个:

(参见上面链接中的第3张图片)

关于这里发生了什么的任何想法?帮助将不胜感激!



我已经尝试过的一些不起作用的东西(我会提供更多链接,但我现在的代表不允许我这样做):

A)使单元格中的视图不透明。更改单元格中不同视图的颜色。

cell.opaque = YES;
cell.backgroundView.opaque = YES;
cell.contentView.opaque = YES;
cell.backgroundColor = menuItemBackgroundColor;
cell.contentView.backgroundColor = menuItemBackgroundColor;
cell.backgroundView.backgroundColor = menuItemBackgroundColor;

B)设置tableView的backgroundView nil。

tableView.backgroundView = nil;

C)设置tableView的backgroundView的背景颜色。

tableView.backgroundView.backgroundColor = [UIColor blackColor];

2 个答案:

答案 0 :(得分:4)

  

设置tableView的背景颜色会覆盖我为单个单元格设置的背景颜色

这是对的。烦人,不是吗? :)问题实际上只是给单元格一个彩色的backgroundView(比它听起来容易得多),或者等到tableView:willDisplayCell:forRowAtIndexPath:,然后在那里设置你的单元格的backgroundColor

答案 1 :(得分:0)

以下解决方法允许您使用故事板中指定的背景颜色,并避免在代码中设置明确的颜色:

  • dequeueReusableCellWithIdentifier:中,虽然故事板中的背景颜色仍然完好无损,但请保存,例如在自定义UITableView子类的属性中。
  • 稍后,在willDisplayCell:中,使用backgroundColor中保存的值恢复dequeueReusableCellWithIdentifier: