2011-09-22 22 views
5

Tôi có UITableViewCell tùy chỉnh sử dụng NSAttributedString. Tôi muốn nó thay đổi màu sắc khi ô được chọn. Làm thế nào tôi có thể làm cho NSAttributedString có hành vi tương tự như một UILabel với tập hợp highlightTextColor?Cách đặtHighlightedTextColor @ NSAttributedString

Tôi đã cố gắng để thay đổi màu sắc ở các chức năng setSelected và setHighlighted của tế bào, nhưng có vẻ như họ được kêu gọi để muộn (trên touchUpInside thay vì Touchdown)

Cảm ơn trước!

+0

bạn đã thử sử dụng smth như: chuỗi NSAttributedString; [chuỗi addAttribute: NSForegroundColorAttributeName giá trị: [UIColor redColor] phạm vi: NSMakeRange (0, [string length])]; khi ô của bạn được chọn? – Maggie

+0

Tôi có thể thay đổi màu văn bản, nhưng tôi không nhận ra rằng ô đã được chọn cho đến khi touchS – Daniel

+0

didSelectRowAtIndexPath - không may mắn? – Maggie

Trả lời

1

UILabel giải pháp lớp con

@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

không phải là một giải pháp bằng chứng đạn nhưng thuận tiện khi bạn cần xử lý trường hợp sử dụng rất đơn giản – marcio

0

Thông thường nó khá đơn giản để phát hiện lựa chọn/làm nổi bật và thay đổi màu sắc tùy thuộc vào nó. Các phương pháp quan trọng là:

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

lưu ý rằng khi ghi đè bạn phải sử dụng phương pháp với animated:, nếu không sẽ không hoạt động.

Khi bạn chỉ muốn thay đổi màu, giải pháp đơn giản nhất là để màu được đặt trên nhãn chứ không phải trên màu. Lưu ý rằng chuỗi được phân bổ vẫn thừa kế tất cả các thuộc tính của UILabel.

Các vấn đề liên quan