UITableViewCell selected row's text color change

IosObjective CIphoneUitableview

Ios Problem Overview


I am having a tableview and I want to know that how can I change the selected row's text color, say to Red ? I tried by this code :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
	static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell= [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:nil] autorelease];
	
	cell.text = [localArray objectAtIndex:indexPath.row];
	
	return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
	cityName = [localArray objectAtIndex:indexPath.row];
	
	UITableViewCell* theCell = [tableView cellForRowAtIndexPath:indexPath];
	theCell.textColor = [UIColor redColor];
	//theCell.textLabel.textColor = [UIColor redColor];

	[tableView deselectRowAtIndexPath:indexPath animated:NO];
}

(1) When I select any row then text color changed to the red but when I select another then previously selected row's text remains red. how can I solve this ?

(2) When I scroll the table text color change to the black color how to solve this ?

Thanks..

Ios Solutions


Solution 1 - Ios

Do this in tableView:cellForRowAtIndexPath::

cell.textLabel.highlightedTextColor = [UIColor redColor];

(And don't use cell.text = ... anymore. It has been deprecated for almost 2 years now. Use cell.textLabel.text = ... instead.)


As Raphael Oliveira mentioned in the comments, if the selectionStyle of your cell equals UITableViewCellSelectionStyleNone this won't work. Check Storyboard as well for the selection style.

Solution 2 - Ios

If you want to change the text colour only, with out changing cell background colour. you can use this.Write this code in in cellForRowAtIndexPath method

UIView *selectionColor = [[UIView alloc] init];
selectionColor.backgroundColor = [UIColor clearColor];
cell.selectedBackgroundView = selectionColor;
cell.textLabel.highlightedTextColor = [UIColor redColor];

Solution 3 - Ios

I had the same problem, try this!

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    for (id object in cell.superview.subviews) {
        if ([object isKindOfClass:[UITableViewCell class]]) {
            UITableViewCell *cellNotSelected = (UITableViewCell*)object;
            cellNotSelected.textLabel.textColor = [UIColor blackColor];
        }
    }
    
    cell.textLabel.textColor = [UIColor redColor];

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
}

That may be the solution to your (and mine) problem.

Solution 4 - Ios

If you're already subclassing UITableViewCell, it's easier/cleaner to set the colors in the awakeFromNib method (assuming you're instantiating from a storyboard or xib).

@implementation MySubclassTableViewCell

- (void)awakeFromNib {
    [super awakeFromNib];
    self.selectedBackgroundView = [[UIView alloc] initWithFrame:self.frame];
    self.selectedBackgroundView.backgroundColor = [UIColor colorWithRed:0.1 green:0.308 blue:0.173 alpha:0.6];
    self.customLabel.highlightedTextColor = [UIColor whiteColor];
}

@end

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMaulikView Question on Stackoverflow
Solution 1 - IosOle BegemannView Answer on Stackoverflow
Solution 2 - IosRinkuView Answer on Stackoverflow
Solution 3 - IosRanferi DominguezView Answer on Stackoverflow
Solution 4 - IosmikehoView Answer on Stackoverflow