web-dev-qa-db-fra.com

UITableViewCell changement de couleur du texte de la ligne sélectionnée

J'ai une vue de table et je veux savoir comment changer la couleur du texte de la ligne sélectionnée, par exemple en rouge? J'ai essayé par ce 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) Lorsque je sélectionne une ligne, la couleur du texte passe au rouge, mais lorsque je sélectionne une autre ligne, le texte de la ligne précédemment sélectionnée reste rouge. Comment puis-je résoudre ça ?

(2) Lorsque je fais défiler le changement de couleur du texte du tableau vers la couleur noire, comment résoudre ce problème?

Merci..

61
Maulik

Faites ceci dans tableView:cellForRowAtIndexPath::

cell.textLabel.highlightedTextColor = [UIColor redColor];

(Et n'utilisez pas cell.text = ... plus. Il est obsolète depuis près de 2 ans maintenant. Utilisation cell.textLabel.text = ... au lieu.)


Comme Raphael Oliveira mentionné dans les commentaires, si le style de sélection de votre cellule est égal à UITableViewCellSelectionStyleNone cela ne fonctionnera pas. Consultez également Storyboard pour le style de sélection.

202
Ole Begemann

Si vous souhaitez modifier la couleur du texte uniquement, sans changer la couleur d'arrière-plan des cellules. vous pouvez l'utiliser. Écrivez ce code dans la méthode cellForRowAtIndexPath

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

J'ai eu le même problème, essayez ça!

-(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];
}

C'est peut-être la solution à votre problème (et au mien).

1
Ranferi Dominguez

Si vous sous-classez déjà UITableViewCell, il est plus facile/plus propre de définir les couleurs dans la méthode awakeFromNib (en supposant que vous instanciez à partir d'un storyboard ou 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
0
mikeho