设置UITableViewCell的背景颜色

时间:2011-07-11 11:42:19

标签: objective-c uitableview

我一直在寻找一种解决方案,用于将accessoryView的背景颜色设置为与单元格的contentView相同的背景颜色。

    cell.contentView.backgroundColor = [UIColor colorWithRed:178/255.f green:14/255.f blue:12/255.f alpha:0.05];
    cell.accessoryView.backgroundColor =[UIColor colorWithRed:178/255.f green:14/255.f blue:12/255.f alpha:0.05];

有一种解决方案可行但只允许我为所有细胞使用一种颜色。

cell.contentView.superView.backgroundColor = [UIColor redColor];

唯一的解决方案是不使用accessoryView并使用图像代替?

谢谢!

6 个答案:

答案 0 :(得分:26)

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

使用此UITableViewDelegate方法,您可以将单元格的颜色设置为不同的颜色。请注意,Apple明确建议您对the docs中的backgroundColor方法中的tableView:willDisplayCell:ForRowAtIndexPath:属性进行更改,其中声明:

  

如果要更改单元格的背景颜色,请在tableView:willDisplayCell:forRowAtIndexPath:表视图委托方法中执行此操作

实际上,在iOS 6中,从其他任何地方(例如tableView:cellForRowAtIndexPath:方法)对属性的更改根本不起作用。在iOS 7中似乎不再是这种情况,但Apple建议在tableView:willDisplayCell:ForRowAtIndexPath:内修改属性仍然存在(没有任何解释)。

对于交替颜色,请执行以下示例:

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

答案 1 :(得分:18)

我也在这一点上挣扎了一段时间,然后使用附件创建了一个自定义图像。但我发现这个解决方案运行良好,不需要自定义图像。诀窍是更改单元格的backgroundView颜色而不是backgroundColor。

UIView *myView = [[UIView alloc] init];
if (indexPath.row % 2) {
    myView.backgroundColor = [UIColor whiteColor];
} else {
    myView.backgroundColor = [UIColor blackColor];
}
cell.backgroundView = myView;

无需更改accessoryView或contentView背景颜色。他们会自动关注。


2014年的注释。通常你会使用 - (void)setSelected:(BOOL)选择动画:(BOOL)动画

所以,你有一个自定义的单元格类,你可以像这样设置正常/选择的颜色......

HappyCell.h
@interface HappyCell : UITableViewCell
@property (strong, nonatomic) IBOutlet UILabel *mainLabel;
etc...
@end

HappyCell.m
@implementation HappyCell

-(id)initWithStyle:(UITableViewCellStyle)style
      reuseIdentifier:(NSString *)reuseIdentifier
    {
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self)
        {
        }
    return self;
    }

-(void)awakeFromNib
    {
    }

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
    {
    [super setSelected:selected animated:animated];

    if(selected)
        {
        self.backgroundColor = [UIColor redColor];
        .. other setup for selected cell
        }
    else
        {
        self.backgroundColor = [UIColor yellowColor];
        .. other setup for normal unselected cell
        }
    }

@end

// to help beginners.......
// in your table view class, you'd be doing this...

-(NSInteger)tableView:(UITableView *)tableView
      numberOfRowsInSection:(NSInteger)section
    {
    return yourDataArray.count;
    }

-(UITableViewCell *)tableView:(UITableView *)tv
      cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    NSInteger thisRow = indexPath.row;
    ContentsCell *cell = [tv
      dequeueReusableCellWithIdentifier:@"cellName"
      forIndexPath:indexPath]; 
    // "cellName" must be typed in on the cell, the storyboard
    // it's the "identifier", NOT NOT NOT the restorationID

    [cell setupForNumber: thisRow];
    cell.mainLabel.text = yourDataArray[ thisRow ][@"whatever"];
    cell.otherLabel.text = yourDataArray[ thisRow ][@"whatever"];

    return cell;
    }

希望它对某人有所帮助。

答案 2 :(得分:7)

这对我有用:

cell.contentView.backgroundColor = [UIColor darkGreyColor];

答案 3 :(得分:2)

对于所有具有相同颜色的线

cell.backgroundColor = [UIColor colorWithRed:6.0/255.0 green:122.0/255.0 blue:145.0/255.0 alpha:1.0f];

2种颜色

cell.backgroundColor = [UIColor colorWithRed:6.0/255.0 green:122.0/255.0 blue:145.0/255.0 alpha:1.0f];

    if ((cell.backgroundColor = (indexPath.row % 2 == 0 ? [UIColor colorWithRed:6.0/255.0 green:122.0/255.0 blue:145.0/255.0 alpha:1.0f] : [UIColor colorWithRed:2.0/255.0 green:68.0/255.0 blue:80.0/255.0 alpha:1.0f]))){
        cell.textLabel.textColor = [UIColor whiteColor];

}

答案 4 :(得分:0)

对于其他可能偶然发现并希望将{{1>}背景设置为图案或纹理而非纯色的人,您可以这样做:

UITableViewCell

答案 5 :(得分:-1)

拥有不同背景的最佳选择以及制作自己的TableViewCell实现的最佳选择,在那里你可以根据内容或索引等逻辑显示你想要的任何东西。