2011-09-22 8 views
5

Mam niestandardowy UITableViewCell, który używa NSAttributedString. Chcę, aby zmieniał kolor po wybraniu komórki. W jaki sposób mogę uczynić NSAttributedString mieć takie samo zachowanie jak UILabel z zestawem highlightedTextColor?Jak ustawićHighlightedTextColor @ NSAttributedString

Próbowałem zmienić kolor w funkcjach setSelected i setHighlighted komórki, ale wydaje się, że są one nazywane późno (na touchUpInside zamiast przyziemienia)

Dzięki z góry!

+0

Czy próbowałeś używać smth like: NSAttributedString ciąg; [string addAttribute: NSForegroundColorAttributeName wartość: [UIColor redColor] zakres: NSMakeRange (0, [string length])]; kiedy wybrana jest twoja komórka? – Maggie

+0

Mogę zmienić kolor tekstu, ale nie zdaję sobie sprawy, że komórka została wybrana, dopóki touchUp – Daniel

+0

didSelectRowAtIndexPath - bez powodzenia? – Maggie

Odpowiedz

1

rozwiązanie podklasą 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

nie jest to rozwiązanie odporne na pocisk, ale wygodne, gdy potrzebujesz obsługiwać bardzo proste przypadki użycia – marcio

0

Zazwyczaj jest to dość proste do wykrycia wybór/podświetlanie i zmieniać kolory w zależności od niego. Istotne są następujące metody:

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

Zauważ, że gdy nadrzędne trzeba użyć metody z animated:, inaczej nie zadziała.

Jeśli chcesz zmienić tylko kolor, najprostszym rozwiązaniem jest ustawienie koloru na etykiecie, a nie na napisie Zauważ, że przypisany ciąg nadal dziedziczy wszystkie właściwości UILabel.

Powiązane problemy