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