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é:
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
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
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
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
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.
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];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
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: