UITableViewCell: Comment empêcher la sélection bleue en arrière-plan avec la propriété isSelected?

J’ai une sous-classe UITableViewCell personnalisée. J’ai défini le contentView de ma sous-classe de cellule sur une classe UIView personnalisée dans laquelle je -drawRect: et -drawRect: fais tout le dessin.

Aussi, je mets cell.contentView.opaque = NO pour obtenir de la transparence dans certaines zones de la cellule (malheureusement, une image de fond derrière la table doit montrer à travers chaque cellule de certaines parties pour obtenir un effet stylistique. un coup de performance, il doit en être ainsi.

Problème: Je vois toujours le joli fond dégradé bleu par défaut dessiné derrière ma cellule (dans les zones transparentes) quand il est sélectionné ou mis en évidence (en cours d’appui). Cela masque l’image derrière la table, ce qui est mauvais.

Objectif: Pour empêcher l’apparition de l’arrière-plan dégradé bleu, tout en pouvant inspecter les propriétés cell.isSelected et cell.isHighlighted depuis -[MyContentView drawRect:] pour déterminer comment dessiner ma propre sélection / mise en évidence personnalisée.

Ce que j’ai essayé:

  1. Le paramètre cell.selectionStyle = UITableViewCellSelectionStyleNone a pour effet d’empêcher le joli arrière-plan de sélection de dégradé bleu, mais empêche également que les propriétés cell.isSelected et cell.isHighlighted soient correctement définies, ce qui signifie que je ne peux pas effectuer ma propre sélection / mise en évidence

  2. la définition de cell.selectionBackgroundView = nil et cell.backgroundView = nil dans la méthode -init ou -init la cellule n’empêche pas l’arrière-plan de la sélection de dégradé bleu

  3. La définition de cell.selectionBackgroundView = nil dans la méthode -[MyContentView -drawRect:] a l’effet désiré d’empêcher l’arrière-plan de la sélection du dégradé bleu, mais cela semble très désordonné

  4. substituant – [UITableViewCell setSelected: animated:] pour être un no-op. cela n’a pas l’effet désiré d’empêcher l’arrière-plan de sélection de dégradé bleu

Une excellente ressource sur la personnalisation de UITableViews a été cet article de Matt Gallagher. Ce que vous voulez faire est de définir le selectedBackgroundView sur une nouvelle vue (au lieu de zéro) qui soit transparente ou un UIImageView.

Vous devez également remplacer setHighlighted: pour empêcher le dégradé bleu de s’afficher. Si vous remplacez simplement setHighlighted: vous obtenez alors un effet de sélection momentané.

vous aurez donc ces deux méthodes:

 - (void)setHighlighted: (BOOL)highlighted animated: (BOOL)animated { // don't highlight } - (void)setSelected: (BOOL)selected animated: (BOOL)animated { // don't select //[super setSelected:selected animated:animated]; } 
 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

À mon avis, la méthode la plus simple est, à mon avis, de définir la case à cocher Atsortingbuts de la vue tabulaire dans l’écran Interface Builder et d’afficher «Afficher la sélection au toucher». Voir la capture d’écran ci-dessous:

entrer la description de l'image ici

Ce qui a fonctionné pour moi dans le passé, c’est de mettre:

 - (void)setSelected:(BOOL)selected animated:(BOOL)animated { } 

Dans mes sous-classes UITableViewCell (car il n’appelle pas super et se met en évidence). J’espère que c’est ce que vous cherchiez.

Que dis-tu de ça?

 // disable user interaction cell.userInteractionEnabled = NO;