I want the background of my UITableViewCells to have a different color displayed every two cells, but when I scroll down and back, they all get the same color. How can I get this effect, knowing that my cells have different sizes of content (depending on their content)?
#define FONT_SIZE 14.0f #define CELL_CONTENT_WIDTH 320.0f #define CELL_CONTENT_MARGIN 20.0f #define NAME_CELL_HEIGHT 20.0f #import "CartCell.h" @implementation CartCell @synthesize nameLabel = _nameLabel; @synthesize ingredientsLabel = _ingredientsLabel; @synthesize myStore; - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { myStore = [Store sharedStore]; self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; if (self) { self.nameLabel = nil; self.ingredientsLabel = nil; // SET "NAME" CELL self.nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; [self.nameLabel setLineBreakMode:UILineBreakModeWordWrap]; [self.nameLabel setMinimumFontSize:FONT_SIZE]; [self.nameLabel setNumberOfLines:1]; [self.nameLabel setTag:1]; self.nameLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18]; [self.nameLabel sizeToFit]; self.nameLabel.backgroundColor = [UIColor clearColor]; [[self contentView] addSubview:self.nameLabel]; // SET "INGREDIENTS" CELL self.ingredientsLabel = [[UILabel alloc] initWithFrame:CGRectZero]; [self.ingredientsLabel setLineBreakMode:UILineBreakModeWordWrap]; [self.ingredientsLabel setMinimumFontSize:FONT_SIZE]; [self.ingredientsLabel setNumberOfLines:0]; [self.ingredientsLabel setFont:[UIFont systemFontOfSize:FONT_SIZE]]; [self.ingredientsLabel setTag:2]; self.ingredientsLabel.backgroundColor = [UIColor clearColor]; [[self contentView] addSubview:self.ingredientsLabel]; if (myStore.cellBackgroundShouldBeLight == YES) { NSLog(@"clear [in] ? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No"); self.contentView.backgroundColor = [[UIColor alloc]initWithRed:87.0/255.0 green:168.0/255.0 blue:229.0/255.0 alpha:1]; myStore.cellBackgroundShouldBeLight = NO; } else { NSLog(@"clear [in] ? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No"); self.contentView.backgroundColor = [[UIColor alloc]initWithRed:187.0/255.0 green:268.0/255.0 blue:229.0/255.0 alpha:1]; myStore.cellBackgroundShouldBeLight = YES; } } return self; } - (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; // Configure the view for the selected state } @end
UPDATE:
I know that I am trying to set it to cellForRowAtIndexPath as suggested, but I get the same result: scrolling down worked fine the first time, but then scrolling again ruined the background color of the cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"CartCell"; CartCell *cell = (CartCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; Recipes *info = [_fetchedResultsController objectAtIndexPath:indexPath]; if (cell == nil) { cell = [[CartCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // if (!cell.nameLabel) { // cell.nameLabel = (UILabel*)[cell viewWithTag:1]; // // cell.nameLabel = (UILabel*)[cell viewWithTag:1]; // } // if (!cell.ingredientsLabel) // cell.ingredientsLabel = (UILabel*)[cell viewWithTag:2]; CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f); CGSize size = [info.ingredients sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap]; [cell.nameLabel setFrame:CGRectMake(10, 10, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), NAME_CELL_HEIGHT)]; [cell.ingredientsLabel setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN + NAME_CELL_HEIGHT, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))]; // SETTING TEXT CONTENT cell.nameLabel.text = info.name; cell.ingredientsLabel.text = info.ingredients; // SETTING BACKGROUND COLOR // UIView *lab = [[UIView alloc] initWithFrame:cell.frame]; // [lab setBackgroundColor:[UIColor blueColor]]; if (myStore.cellBackgroundShouldBeLight == YES) { NSLog(@"clear? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No"); cell.contentView.backgroundColor = [[UIColor alloc]initWithRed:87.0/255.0 green:84.0/255.0 blue:229.0/255.0 alpha:1]; // cell.backgroundView = lab; // ingredientsLabel.backgroundColor = [UIColor clearColor]; // nameLabel.backgroundColor = [[UIColor alloc]initWithRed:87.0/255.0 green:168.0/255.0 blue:229.0/255.0 alpha:1]; // [cell setBackgroundColor: [[UIColor alloc]initWithRed:87.0/255.0 green:168.0/255.0 blue:229.0/255.0 alpha:1]]; // [cell setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]]; myStore.cellBackgroundShouldBeLight = NO; } else { // cell.contentView.tag = 2; NSLog(@"clear? %@", myStore.cellBackgroundShouldBeLight ? @"Yes" : @"No"); cell.contentView.backgroundColor = [[UIColor alloc]initWithRed:187.0/255.0 green:184.0/255.0 blue:229.0/255.0 alpha:1]; myStore.cellBackgroundShouldBeLight = YES; } return cell; }
ios objective-c cocoa-touch uitableview
maxagaz
source share