84 votes

Style de sélection personnalisé UITableViewCell?

Lorsque je clique sur mon UITableViewCell, l'arrière-plan de la partie (les zones que mon image de fond ne couvre pas) s'allume en bleu lorsque je clique sur la cellule. Aussi, tous les de la UILabels sur la cellule blanc lorsqu'il est cliqué sur ce qui est ce que je veux.

Cependant, ce que je ne veux pas est le fond bleu quand je clique dessus, mais si je n' selectionstylenone, je perds les couleurs de l' UILabels dans la cellule.

Donc, est-il possible de simplement se débarrasser de l'arrière-plan bleu lorsque la cellule est cliqué, mais pour garder la couleur de l' UILabels?

176voto

jonkroll Points 10400

Vous pouvez le faire comme suit. Définissez votre cellule de tableau de sélection du style d' UITableViewCellSelectionStyleNone. Cela permettra d'éliminer l'arrière-plan bleu en évidence. Ensuite, pour rendre le texte de l'étiquette mettant en évidence le travail de la manière que vous voulez, au lieu d'utiliser la valeur par défaut UITableViewCell classe, créez une sous-classe de UITableViewCell et remplacer la valeur par défaut de mise en œuvre de l' setHighlighted:animated avec votre propre mise en œuvre qui définit l'étiquette de couleurs comme vous le souhaitez en fonction de la surbrillance.

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    if (highlighted) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

76voto

Alfa Points 356

Ne faites pas votre style de sélection de cellule

 cell.selectionstyle = UITableViewCellSelectionStyleNone;

UIView *selectedView = [[UIView alloc]init];
selectedView.backgroundColor = [UIColor redColor];
cell.selectedBackgroundView =  selectedView;
 

Alors ce code fonctionnera correctement

16voto

Scar Points 1722

Vous pouvez utiliser le délégué suivant des méthodes après avoir défini le style de sélection pour aucun:

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath

Mettre en œuvre votre code ici, comme ceci

-(NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    CustomCell *cell = (CustomCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell.lbls setTextColor:[UIColor whiteColor]];
    return indexPath;
}

15voto

who9vy Points 549

Pour obtenir ce travail, vous devez définir le style de sélection pour UITableViewCellSelectionStyleNone , puis vous devez remplacer la méthode setSelected:animated: pour obtenir le résultat que vous souhaitez. Il fait la même chose que le mécanisme de sélection automatique de l'iOS lorsque vous voyez le bleu (ou gris) de sélection.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    if (selected) {
        self.textLabel.textColor = [UIColor whiteColor];
    } else {
        self.textLabel.textColor = [UIColor blackColor];
    }
}

Vous pouvez également personnaliser d'une autre façon, par exemple en changeant la UITableViewCell arrière-plan, etc.

13voto

Mrunal Points 4359

Dans cellForRowAtIndexPath utiliser ce code:

[cell setSelectionStyle:UITableViewCellSelectionStyleNone];

[cell.myLabel setHighlightedTextColor: [UIColor whiteColor]]; // for all your labels

Espérons que cela fonctionnera pour vous.

Profitez De Codage :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X