5

I'm trying to write code to modify the background color of a cell based on it's position in the table. While the following code 'works', it only effects cells that are passed to it. Empty cells don't get effected.

- (void)tableView: (UITableView*)tableView willDisplayCell: (UITableViewCell*)cell forRowAtIndexPath: (NSIndexPath*)indexPath
{
    if(!indexPath.row%2)
    {
        cell.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ;
        NSLog(@"Blue");
    }
    else{
        cell.backgroundColor = [UIColor whiteColor];
        NSLog(@"white");
    }
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor];
}

How can I effect the rest of the cells that are displayed, if empty, when there are few items in the list?

By 'empty' cells, I mean the placeholder cells that are displayed when your data source doesn't have enough data to fill the entire view given to the table view. For example, if you can fit 10 cells, but only have 5 worth of data, you only ever get handed 5 cells to work with -- the next 5 are empty and as far as I can tell, unaccessable.

RonLugge
  • 5,086
  • 5
  • 33
  • 61
  • so you want the table cells to alternate between blue and white, regardless of whether there is data in the cells or if they're empty? – Nabou Feb 03 '13 at 00:28
  • @Nabou Yeah, that was what I desired -- once upon a time. I've actually moved on in the intervening years between now and then, though. This problem is a purely theoretical one at this point. The app 'died' a long time ago (and so did the entire company developing it) – RonLugge Feb 04 '13 at 03:41

4 Answers4

2

I guess you want to change the background only of "empty" cells ... Then you can change the backgroundColor in the InterfaceBuilder of the UITableView. But it will affect all empty cells.

You can also change the separator type.

Also, have a look here : http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

EDIT :

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    // 7 depends on how many cell is shown
    return ([source count] <= 7) ? 7 : [source count];
}

From : Show blank UITableViewCells in custom UITableView

Community
  • 1
  • 1
William Remacle
  • 1,480
  • 2
  • 16
  • 24
  • I want to effect all cells -- I want all of the cells displayed to bounce back and forth between the two indicated colors. Alas, the link you displayed doesn't provide useful source; if I try and set the background color of the contentView, it doesn't change the entire cell's color properly. There is a 'strip' of unchanged color on the right. And changing it so I'm changing selectedBackgroundView, or just backgroundView, doesn't do anything either. – RonLugge Oct 08 '10 at 07:42
  • I edit my answer : you need to add by yourself extra cells, and now in cellForRowAtIndexPath all cells will be customizable. – William Remacle Oct 08 '10 at 07:51
  • 1
    The problem is I don't have those extra cells (in terms of the source data), which causes other unintended results. – RonLugge Oct 08 '10 at 23:55
1

It should work if the backgroundColor property of the cell's contentView is set, not the backgroundColor of the cell:

cell.contentView.backgroundColor = [UIColor colorWithRed: 0.0 green: 0.0 blue: 1.0 alpha: 1.0] ;
iCode
  • 320
  • 2
  • 13
  • I've edited the question to make the point more clear. (Though I'm surprised this got dug up two years later...) – RonLugge Feb 03 '13 at 00:21
0

Try to add the following line

[[cell contentView] setBackgroundColor:[UIColor colorWithRed:0 green:128/255.f blue:0 alpha:1]];

in method

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

with the same logic you used in willDisplayCell method

as suggested here: http://www.zenbrains.com/blog/en/2010/06/color-de-fondo-de-celdas-vacias/

*notice that we change the background color for [cell contentView]

Julian F. Weinert
  • 7,474
  • 7
  • 59
  • 107
arniotaki
  • 2,175
  • 2
  • 23
  • 26
  • Please read the question more closely. It's not a matter of setting the background color of the table, I wanted to alternate the color of the actual cells, including empty cells. – RonLugge May 30 '13 at 20:26
0

You should implement

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

in your delegate and initialize cells as you want.

Artem Tikhomirov
  • 21,497
  • 10
  • 48
  • 68
  • Unfortunately, that doesn't seem to work. Adding the code: cell.backgroundColor=[UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0]; doesn't do anything to change any of the cells, they all come out the default white-grey color. – RonLugge Oct 08 '10 at 07:28