38 votes

UITableViewCell : Comment empêcher l'arrière-plan bleu de la sélection sans modifier la propriété isSelected ?

Je dispose d'une UITableViewCell sous-classe. J'ai défini le contentView de ma sous-classe de cellule à d'une UIView dans laquelle je surcharge la classe -drawRect: et faire tout le dessin là-bas.

De plus, je mets cell.contentView.opaque = NO afin d'obtenir la transparence dans certaines zones de la cellule (malheureusement, une image de fond derrière la table doit apparaître à travers chaque cellule dans certaines parties pour obtenir un effet stylistique. je sais que c'est un problème de performance. il doit en être ainsi).

Problème : je vois toujours le joli fond bleu dégradé par défaut se dessiner derrière ma cellule (dans les zones transparentes) lorsqu'elle est sélectionnée ou mise en évidence (en appuyant dessus). Cela masque l'image derrière le tableau, ce qui est mauvais.

Objectif : empêcher l'apparition de l'arrière-plan bleu dégradé, tout en étant en mesure d'inspecter l'écran de l'ordinateur. cell.isSelected y cell.isHighlighted les propriétés de l'intérieur -[MyContentView drawRect:] pour déterminer comment dessiner ma propre sélection/mise en évidence personnalisée.

Ce que j'ai essayé :

  1. paramètre cell.selectionStyle = UITableViewCellSelectionStyleNone a l'effet désiré d'empêcher l'apparition d'un joli fond de sélection en gradient bleu, mais empêche également l'utilisation de la fonction cell.isSelected y cell.isHighlighted ne sont pas correctement définies, ce qui signifie que je ne peux pas faire ma propre sélection personnalisée/le dessin en surbrillance.

  2. réglage cell.selectionBackgroundView = nil y cell.backgroundView = nil dans la cellule -init o -prepareForReuse n'empêche pas l'arrière-plan de sélection du gradient bleu

  3. réglage cell.selectionBackgroundView = nil en el -[MyContentView -drawRect:] méthode fait ont l'effet désiré d'empêcher l'arrière-plan de sélection du gradient bleu, mais cela semble très peu pratique

  4. Le remplacement de -[UITableViewCell setSelected:animated :] par un no-op. Cela n'a pas l'effet désiré d'empêcher l'arrière-plan de sélection en dégradé bleu.

-12voto

Liam Goodacre Points 1

Que pensez-vous de ça ?

// disable user interaction
cell.userInteractionEnabled = NO;

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