2015-02-15 4 views
3

У меня проблема с изменением цвета подстроки с использованием «NSForegroundColorAttributeName». Я запутался, так как применяются другие атрибуты для одной и той же подстроки (подчеркивание).NSForegroundColorAttributeName не работает для UILabel

Также попытался использовать устаревший атрибут «UITextAttributeTextColor» и другой предложенный атрибут «kCTForegroundColorAttributeName» и получил тот же эффект.

Я компиляции для прошивкой 7.

enter image description here

NSString *freeText = [NSString stringWithFormat:@"(%@)", self.me.activity.text]; 

    int lblMaxWidth = arrImgView.origin.x - WPRConstraints.BorderOffset; 
    int lblMaxHeight = self.activityView.size.height - WPRConstraints.BorderOffset * 2; 

    RevUILabel *addActivityLbl = [[RevUILabel alloc] initWithFontNameMultiLine:[WPRFonts LattoBold] 
                      size:16 
                   sizeConstrain:CGSizeMake(lblMaxWidth,lblMaxHeight)]; 

    addActivityLbl.text = [NSString stringWithFormat:@"%@ %@", Translate(self.me.activity.activityKey), freeText] ; 
    addActivityLbl.textColor = BlackColor; 

    NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy]; 



    [str addAttribute:NSUnderlineColorAttributeName value:[UIColor redColor] range:[addActivityLbl.text rangeOfString:freeText]]; 
    [str addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:1] range:[addActivityLbl.text rangeOfString:freeText]]; 

    [str addAttribute:NSForegroundColorAttributeName 
         value:[UIColor redColor] 
       range:[addActivityLbl.text rangeOfString:freeText]]; 


    addActivityLbl.attributedText = str; 


    addActivityLbl.frame = CGRectMake(WPRConstraints.BorderOffset, 
             WPRConstraints.BorderOffset, 
             addActivityLbl.size.width, 
             addActivityLbl.size.height); 
    [self.activityView addSubview:addActivityLbl]; 
+0

Вы пытались передать CGColor вместо UIColor? –

+0

Да, я сделал с атрибутом kCTForegroundColorAttributeName – Misha

+0

Прошу прощения, могу прокомментировать другие атрибуты и обновить результаты? –

ответ

5

Проблема эта линия:
NSMutableAttributedString *str = [addActivityLbl.attributedText mutableCopy];

Я не знаю, предыдущие строки кода, но это может быть так, что addActivityLbl.attributedText пуст.

Во-вторых, используя NSAttributedString с UILabel не так надежно, как с помощью UITextView. attributedTextUILabel наследует атрибуты от text от UILabel, если атрибуты явно не указаны.

Ваш addActivityLbl.textColor черный. И вы еще не установили addActivityLbl.attributedText ForegroundColorAttribute. Это означает, что ваш addActivityLbl.attributedText наследует BlackColor от вашего addActivityLbl.textColor.

Эта линия не работает должным образом; потому что вы все еще не установили addActivityLbl.attributedText. freeText еще не выбрано.

[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[addActivityLbl.text rangeOfString:freeText]];

underlyning работает, потому что underlyning не является собственностью addActivityLbl.text (не наследуется attributedText).

Я рекомендую вместо этого использовать UITextView (что более безопасно). Другой вариант - установить label.attributedText, прежде чем ссылаться на некоторые его диапазоны.

+0

Я пытался установить атрибутированный текст перед чем-либо еще и получил очень странное поведение - точки вместо букв. Во всяком случае, единственное, что работает для меня, как и ожидалось, - это использование UITextView вместо UILabel. Я не очень рад использовать это обходное решение, так как я до сих пор не понимаю коренной случай проблемы. Если я не буду выяснять это в течение следующих нескольких дней, я приму этот ответ. – Misha

+0

Я не знаю, что такое RevUILabel. Я искал его и не мог найти ничего (но 2 вопроса). Является ли это подклассом 'UIView'? – antonio

+0

№ Это просто расширение UILabel – Misha

8

Убедитесь, что вы не устанавливать какой-то цвет на textColor свойстве UILabelпосле вы установили attributedText.

0

У меня была аналогичная проблема, пытаясь установить цвет присвоенного названия UIButton. Я применял другие атрибуты, такие как underline, и они работали, но атрибут NSForegroundColorAttributeName не имел никакого эффекта.

После потянув меня за волосы и сомнения моего собственного здравомыслия, я в конце концов обнаружил, что моя проблема в том, что в раскадровке, моя кнопка была установлена, чтобы быть System кнопки:

enter image description here

И это нужно быть Custom:

enter image description here

После изменения, что одна установка в раскадровке я был в состоянии установить NSForegroundColorAttribute Имя с ожидаемым, нормальным поведением.

Надеюсь, это поможет кому-то!

Смежные вопросы