2011-09-22 96 views
5

我有一个自定义的UITableViewCell它使用NSAttributedString。我希望它在选中单元格时改变颜色。我如何使NSAttributedString具有与使用highlightTextColor集的UILabel相同的行为?如何设置HighlightedTextColor @ NSAttributedString

我试图在的setSelected和细胞的setHighlighted功能来改变颜色,但似乎他们被称为晚(上touchUpInside而不是着陆)

提前感谢!

+0

你有没有尝试过使用像这样的smth: NSAttributedString string; [string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,[string length])]; 当你的细胞被选中? – Maggie

+0

我可以改变文本的颜色,但是我没有意识到单元格已经被选中,直到touchUp – Daniel

+0

didSelectRowAtIndexPath - 没有运气? – Maggie

回答

1

的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

不是一个防弹解决方案,但方便,当你需要处理非常简单的用例 – marcio

0

通常这是很简单的检测选择/高亮显示,并根据它改变颜色。最重要的方法是:

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

注意重载时,你必须使用的方法与animated:,否则将无法正常工作。

当您只想更改颜色时,最简单的解决方法是让颜色在标签上设置,而不是在字符串上设置。请注意,属性字符串仍然继承UILabel的所有属性。

相关问题