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?
Just set the cell selection to UITableViewCellSelectionStyleNone in the UIBuilder or in code:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
It actually animates back to cell background color so you will have to set it too
Add this line in lighten method
self.backgroundColor = [UIColor whiteColor];
and this in darken method
self.backgroundColor = darkColor;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With