14

I am trying to set the cell background of my UITableViewCells but I am struggling with the background color of the UIAccessoryView. It does not change.

Can anyone help me make the background color of the UIAccessoryView transparent (or actually any other color)?

This is my code

cell.textLabel.backgroundColor = [UIColor clearColor];
cell.accessoryView.backgroundColor = [UIColor clearColor];
cell.detailTextLabel.backgroundColor = [UIColor clearColor];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

if(indexPath.row % 2) {
     cell.contentView.backgroundColor = [UIColor clearColor];
}
else {
    cell.contentView.backgroundColor = [UIColor redColor];
}

Here is an image illustrating the issue

UIAccessoryView does not change background color.

simonbs
  • 7,932
  • 13
  • 69
  • 115

3 Answers3

46

You'll need to set the backgroundView property of the UITableViewCell. For example:

UIView* myBackgroundView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
myBackgroundView.backgroundColor = [UIColor redColor];
myCell.backgroundView = myBackgroundView;

If you want something more fancy, like a red gradient background, you would implement a subclass of UIView that draws a gradient in drawRect:, and use it as the backgroundView.

You can also set the selectedBackgroundView property if you want a custom look for a selected table cell.

Darren
  • 25,520
  • 5
  • 61
  • 71
  • Awesome! That works and is so much easier! Good idea with gradient and a `selectedBackgroundView` Thank you very much! – simonbs Mar 19 '11 at 13:24
  • Thanks a lot... Got stuck for a long time here and your answer was the first one to solve it. :) – Git.Coach Jun 15 '13 at 01:08
4

In function

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

Use following code

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

reference for more details

Community
  • 1
  • 1
Abhishek Panchal
  • 394
  • 1
  • 11
0

If you want to change it in custom class of UITableViewCell you can just use:

override func layoutSubviews() {
    super.layoutSubviews()
    self.backgroundColor = UIColor.whiteColor()
}

changing background inside of awakeFromNib() or init?(coder aDecoder: NSCoder) doesn't work!

Trzy Gracje
  • 2,969
  • 4
  • 20
  • 24