2011-09-22 5 views
5

NSAttributedStringを使用するカスタムUITableViewCellがあります。セルが選択されたときに色を変更したい。どのようにしてNSAttributedStringをhighlightedTextColorを設定したUILabelと同じ動作にすることができますか?setHighlightedTextColor @ NSAttributedString

事前に

おかげで、私はするsetSelected機能や、細胞のsetHighlightedで色を変更しようとしましたが、彼らが(touchUpInside代わりのタッチダウンに)後半に呼ばれているようです!

+0

あなたは次のようなsmthを使ってみましたか? NSAttributedString string; [文字列addAttribute:NSForegroundColorAttributeName値:[UIColor redColor]範囲:NSMakeRange(0、[文字列の長さ])]; セルが選択されていますか? – 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

は、一般的にそれが選択/ハイライトを検出し、それに応じて色を変更するにはかなり簡単です。重要なメソッドは以下のとおりです。オーバーライドするときに、それ以外の場合は動作しません、animated:とメソッドを使用する必要があること

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

ノート。

色のみを変更する場合、最も簡単な解決策は、色を文字列ではなくラベルに設定することです。属性付き文字列は、UILabelのすべてのプロパティを継承していることに注意してください。

関連する問題