2011-09-22 7 views
5

Ho un UITableViewCell personalizzato che utilizza una stringa NSAttributed. Voglio che cambi colore quando viene selezionata la cella. Come posso fare in modo che NSAttributedString abbia lo stesso comportamento di UILabel con evidenziatoTextColor impostato?Come impostareHighlightedTextColor @ NSAttributedString

Ho provato a cambiare il colore alle funzioni setSelected e setHighlighted della cella, ma sembra che essi sono chiamati a tardi (su touchUpInside invece di Touchdown)

Grazie in anticipo!

+0

hai provato a usare smth come: NSAttributo stringa stringa; [string addAttribute: NSForegroundColorAttributeName valore: [UIColor redColor] range: NSMakeRange (0, [string length])]; quando la tua cella è selezionata? – Maggie

+0

Posso cambiare il colore del testo, ma non mi rendo conto che la cella è stata selezionata fino al touchUp – Daniel

+0

didSelectRowAtIndexPath - nessuna fortuna o? – Maggie

risposta

1

soluzione sottoclasse UILabel

@implementation CustomLabelHighlighted 
{ 
    NSAttributedString *savedAttributedString; 
} 

-(void)setHighlighted:(BOOL)highlighted 
{ 
    [super setHighlighted:highlighted]; 

    if (!highlighted) 
    { 
     [super setAttributedText:savedAttributedString]; 
     return; 
    } 

    NSMutableAttributedString *highAttributedString = [savedAttributedString mutableCopy]; 
    NSRange range = NSMakeRange(0, highAttributedString.string.length); 
    [highAttributedString addAttribute:NSForegroundColorAttributeName value:self.highlightedTextColor range:range]; 
    [super setAttributedText:highAttributedString]; 
} 

- (void)setAttributedText:(NSAttributedString *)attributedText 
{ 
    [super setAttributedText:attributedText]; 
    savedAttributedString = attributedText; 
} 

@end 
+0

non una soluzione a prova di proiettile ma comoda quando devi gestire casi d'uso molto semplici – marcio

0

In genere è abbastanza semplice per rilevare la selezione/valorizzazione e cambiare i colori a seconda su di esso. I metodi importanti sono:

-(void)setHighlighted:animated: 
-(void)setSelected:animated: 

nota che quando si esegue l'override si deve utilizzare i metodi con animated:, altrimenti non funzionerà.

Quando si desidera modificare solo il colore, la soluzione più semplice è lasciare che il colore sia impostato sull'etichetta e non sulla stringa. Si noti che la stringa attribuita sta ancora ereditando tutte le proprietà di UILabel.