Ho un'ombra di testo per le celle a mio UITableView per dare loro un aspetto inciso:Rimozione ombra testo in UITableViewCell quando è selezionata
cell.textLabel.textColor = [UIColor colorWithWhite:0.2 alpha:1.000];
cell.textLabel.shadowColor = [UIColor whiteColor];
cell.textLabel.shadowOffset = CGSizeMake(0, 1);
Dal momento che il colore dell'ombra in realtà è bianco, quando viene selezionata una riga e diventa blu, l'ombra bianca diventa veramente visibile e rende il testo brutto.
Qualcuno sa come rimuovere l'ombra prima che venga applicato lo stile di selezione di celle predefinito?
ho provato:
- Utilizzando
-tableView:willSelectRowAtIndexPath:
di disinserire l'ombra concell.textLabel.shadowColor = nil
, ma questo non funziona nel tempo - l'ombra diventa non impostato solo dopo l'applicazione di selezione stile blu. - Controllare
cell.selected
intableView:cellForRowAtIndexPath:
prima di impostare l'ombra ma questo ovviamente non funziona poiché la cella non viene ridisegnata dopo una selezione.
Ho anche provato a sovrascrivere il metodo delegato -tableView:willDisplayCell:forRowAtIndexPath:
come suggerito da Kevin in basso. Dalle istruzioni di registrazione che ho inserito, questo metodo delegato viene chiamato solo poco prima che una cella venga disegnata: quando una cella viene toccata, è già troppo tardi. Questo è il codice che ho usato
(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];
}
}
In realtà, potrebbe essere sufficiente eseguire l'override di setHighlighted: animato e non toccare setSelected: animato a tutti. Ci proverei prima. –
Grazie Mike! Questo funziona perfettamente. –
Posso confermare che è necessario eseguire l'override di entrambi. La cella viene evidenziata quando viene toccata, quindi selezionata quando alzi il dito verso l'alto. Se si esegue solo l'override di setHighlighted :, l'ombra riappare quando termina il tocco.Anche se si passa a un'altra vista dopo la selezione, è evidente. – benzado