How to change color of UITableViewCell when selecting?
iOS 6.0 and later
- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {return YES;}- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath { // Add your Colour. CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath]; [self setCellColor:[UIColor whiteColor] ForCell:cell]; //highlight colour}- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath { // Reset Colour. CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath]; [self setCellColor:[UIColor colorWithWhite:0.961 alpha:1.000] ForCell:cell]; //normal color}- (void)setCellColor:(UIColor *)color ForCell:(UITableViewCell *)cell { cell.contentView.backgroundColor = color; cell.backgroundColor = color;}
Custom UITableViewCell
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; UIView * selectedBackgroundView = [[UIView alloc] init]; [selectedBackgroundView setBackgroundColor:[UIColor colorFromHexString:@"5E6073"]]; // set color here [self setSelectedBackgroundView:selectedBackgroundView];}
You can also use UIAppearance like this:
UIView *selectionView = [UIView new];selectionView.backgroundColor = [UIColor redColor];[[UITableViewCell appearance] setSelectedBackgroundView:selectionView];
This will apply to all instances of UITableViewCell or any of its subclasses you might have. Just make sure the selectionStyle
property of your cell is not set to UITableViewCellSelectionStyleNone
.
iOS 8.0 (and later) using Swift
Swift 2
override func tableView(tableView: UITableView, shouldHighlightRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true}override func tableView(tableView: UITableView, didHighlightRowAtIndexPath indexPath: NSIndexPath) { var cell = tableView.cellForRowAtIndexPath(indexPath) cell?.contentView.backgroundColor = UIColor.orangeColor() cell?.backgroundColor = UIColor.orangeColor()}override func tableView(tableView: UITableView, didUnhighlightRowAtIndexPath indexPath: NSIndexPath) { var cell = tableView.cellForRowAtIndexPath(indexPath) cell?.contentView.backgroundColor = UIColor.blackColor() cell?.backgroundColor = UIColor.blackColor()}
Swift 3
override func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool { return true}override func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) cell?.contentView.backgroundColor = UIColor.orange cell?.backgroundColor = UIColor.orange}override func tableView(_ tableView: UITableView, didUnhighlightRowAt indexPath: IndexPath) { let cell = tableView.cellForRow(at: indexPath) cell?.contentView.backgroundColor = UIColor.black cell?.backgroundColor = UIColor.black}