I have a custom UITableViewCell which changes color based on which row it is in:
TableViewController.m
- (void)willDisplayCell:(GSRSongCell *)cell atIndexPath:(NSIndexPath *)indexPath;
{
if (indexPath.row % 2 == 0) {
[cell lighten];
} else {
[cell darken];
}
}
CustomTableViewCell.m
- (void)lighten
{
self.selectedBackgroundView.backgroundColor = [UIColor whiteColor];
self.contentView.backgroundColor = [UIColor whiteColor];
self.primaryLabel.backgroundColor = [UIColor whiteColor];
self.secondaryLabel.backgroundColor = [UIColor whiteColor];
}
- (void)darken
{
UIColor *darkColor = [UIColor colorWithR:241 G:241 B:241 A:1];
self.selectedBackgroundView.backgroundColor = darkColor;
self.contentView.backgroundColor = darkColor;
self.primaryLabel.backgroundColor = darkColor;
self.secondaryLabel.backgroundColor = darkColor;
}
However, when I call deselectRowAtIndexPath:animated:YES, the animation fades to a white color in cells where the selectedBackgroundColor should be darker.
I then realised that the deselection animation has nothing to do with the selectedBackgroundColor; in fact, the deselection animation is actually based on the tableView.backgroundColor property!
How can I override the deselection animation to fade to the background color of my cells?
It actually animates back to cell background color so you will have to set it too
Add this line in lighten method
and this in darken method