web-dev-qa-db-fra.com

UitailViewCell: Comment empêcher la sélection de la sélection bleue W / O Borking Propriété issuite?

J'ai une sous-classe Custom UITableViewCell. J'ai défini le contentView de ma sous-classe de cellules à une classe Custom UIView classe dans laquelle je décide -drawRect: et faire tout le dessin là-bas.

Aussi, je définit cell.contentView.opaque = NO Afin de réaliser la transparence dans certaines zones de la cellule (malheureusement, une image backgroud derrière la table doit montrer à travers chaque cellule dans certaines parties pour atteindre un effet stylistique. Je sais que c'est une performance touchée. Il doit le faire).

Problème: Je vois toujours le fond de gradient bleu clair par défaut étant dessiné derrière ma cellule (dans les zones transparentes) lorsqu'elle est sélectionnée ou surlignée (enfoncée). Cela obscurcit l'image derrière la table, ce qui est mauvais.

Objectif: empêcher l'antécédent de gradient bleue d'apparaître, mais est toujours en mesure d'inspecter la cell.isSelected et cell.isHighlighted propriétés de l'intérieur -[MyContentView drawRect:] Pour déterminer comment dessiner ma propre sélection personnalisée/en surbrillance.

Ce que j'ai essayé:

  1. réglage cell.selectionStyle = UITableViewCellSelectionStyleNone a l'effet souhaité de la prévention de la jolie sélection de gradient bleue, mais empêche également le cell.isSelected et cell.isHighlighted Propriétés d'être correctement définies, ce qui signifie que je ne peux pas faire mon propre dessin de sélection/de surbrillance personnalisée

  2. réglage cell.selectionBackgroundView = nil et cell.backgroundView = nil dans la cellule -init ou -prepareForReuse méthode n'empêche pas le fond de sélection de gradient bleu

  3. réglage cell.selectionBackgroundView = nil dans le -[MyContentView -drawRect:] méthode fait avoir l'effet souhaité de prévenir le fond de sélection de gradient bleu, mais cela semble très janky

  4. remplacer - [UitablementViewcell SetSelected: animé:] Pour être un non-op. Cela n'a pas l'effet souhaité de prévenir le fond de sélection de gradient bleu

38
Todd Ditchendorf

Une excellente ressource sur la personnalisation des vues utatives a été ce post de Matt Gallagher. Ce que vous voudrez faire est de définir la sélection de plans de sélection sur une nouvelle vue (au lieu de nil) soit transparente ou uiImageView.

47
Jason

Vous devez également remplacer à Sethighight: pour empêcher le gradient bleu de montrer jamais. Si vous passez juste à Sethighighled: vous vous retrouvez avec un effet de sélection momentané.

donc, vous aurez 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];
}
68
jessecurry
cell.selectionStyle = UITableViewCellSelectionStyleNone;
61
Mugunth

De loin la méthode la plus facile - à mon avis - pour y parvenir, se trouve en définissant la case à cocher Attributs de la vue de la table dans l'écran de constructeur d'interface où il est indiqué "Afficher la sélection en contact". Voir la capture d'écran ci-dessous:

enter image description here

1
Max MacLeod