J'ai ajouté une ombre de texte aux cellules dans mon UITableView pour leur donner un regard gravé:Suppression ombre du texte dans UITableViewCell quand il est sélectionné
cell.textLabel.textColor = [UIColor colorWithWhite:0.2 alpha:1.000];
cell.textLabel.shadowColor = [UIColor whiteColor];
cell.textLabel.shadowOffset = CGSizeMake(0, 1);
Étant donné que la couleur de l'ombre est en fait blanc, quand une ligne obtient sélectionnée et devient bleu, l'ombre blanche devient vraiment visible et rend le texte moche.
Est-ce que quelqu'un sait comment je peux supprimer l'ombre avant que le style de sélection de cellule par défaut ne soit appliqué?
J'ai essayé:
- En utilisant
-tableView:willSelectRowAtIndexPath:
pour désinitialiser l'ombre aveccell.textLabel.shadowColor = nil
mais cela ne fonctionne pas dans le temps - l'ombre se unset seulement après le style de sélection bleu est appliqué. - Vérification
cell.selected
danstableView:cellForRowAtIndexPath:
avant de définir l'ombre, mais cela ne fonctionne évidemment pas puisque la cellule n'est pas redessinée après une sélection.
J'ai également essayé de remplacer la méthode déléguée -tableView:willDisplayCell:forRowAtIndexPath:
comme Kevin suggéré ci-dessous. A partir des instructions de journalisation que j'ai placées, cette méthode de délégué n'est appelée que juste avant qu'une cellule ne soit dessinée - au moment où une cellule est touchée, il est déjà trop tard. C'est le code que j'ai utilisé
(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"in willDisplayCell");
if (cell.highlighted || cell.selected) {
NSLog(@"drawing highlighed or selected cell");
cell.textLabel.shadowColor = nil;
} else {
cell.textLabel.shadowColor = [UIColor whiteColor];
}
}
En fait, il se peut que vous ayez juste besoin de surcharger setHighlighted: animé et ne pas toucher setSelected: animé du tout. Je vais essayer ça en premier. –
Merci Mike! Cela fonctionne parfaitement. –
Je peux confirmer que vous devez remplacer les deux. La cellule est mise en évidence lorsque vous la touchez, puis sélectionnée lorsque vous levez le doigt vers le haut. Si vous remplacez uniquement setHighlighted:, l'ombre réapparaît lorsque le toucher se termine.Même si vous passez à une autre vue après la sélection, c'est visible. – benzado