Как установитьHighlightedTextColor @NSAttributedString

У меня есть собственный UITableViewCell, который использует NSAttributedString. Я хочу, чтобы он менял цвет при выборе ячейки. Как я могу заставить NSAttributedString иметь то же поведение, что и UILabel с набором selectedTextColor?

Я пытался изменить цвет в функциях setSelected и setHighlighted ячейки, но кажется, что они вызываются поздно (на touchUpInside вместо touchDown)

Заранее спасибо!


person Daniel    schedule 22.09.2011    source источник
comment
Вы пытались использовать что-то вроде: NSAttributedString string; [строка addAttribute: NSForegroundColorAttributeName значение: [UIColor redColor] диапазон: NSMakeRange (0, [длина строки])]; когда выбрана ваша ячейка?   -  person Maggie    schedule 22.09.2011
comment
Я могу изменить цвет текста, но я не понимаю, что ячейка была выбрана, пока не появится TouchUp.   -  person Daniel    schedule 22.09.2011
comment
didSelectRowAtIndexPath - тоже не повезло?   -  person Maggie    schedule 22.09.2011
comment
Я пытаюсь сделать это в классе UITableViewCell, который, к сожалению, не имеет этого метода.   -  person Daniel    schedule 22.09.2011
comment
Да, я знаю. я имел в виду, что если у вас есть UITableViewCell, у вас, вероятно, есть UITableView? на didSelectRowAtIndexPath вы можете получить ячейку, а затем изменить ее содержимое. Я знаю, это не то, чего ты хочешь, но, возможно, это сработает.   -  person Maggie    schedule 22.09.2011
comment
Это, вероятно, сработает, но мне придется изменить его в слишком многих местах.   -  person Daniel    schedule 23.09.2011


Ответы (2)


Решение подкласса 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
person Uladzimir    schedule 23.12.2014
comment
не пуленепробиваемое решение, но удобное, когда вам нужно обрабатывать очень простые варианты использования - person marcio; 30.04.2015

Как правило, довольно просто определить выделение/выделение и изменить цвета в зависимости от этого. Важными методами являются:

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

обратите внимание, что при переопределении вы должны использовать методы с animated:, иначе это не сработает.

Если вы хотите изменить только цвет, самое простое решение — позволить установить цвет на этикетке, а не на строке. Обратите внимание, что атрибутированная строка по-прежнему наследует все свойства UILabel.

person Sulthan    schedule 30.04.2015