Текст UILabel с несколькими цветами шрифтов - PullRequest
3 голосов
/ 29 ноября 2010

Есть ли способ, чтобы свойство textColor для UILabel было двумя разными UIColors?В основном я пытаюсь сделать первый символ в UILabel text property равным greenColor, а остальные - blackColor.Я хотел бы избежать использования двух разных UILabels, потому что я могу изменить позицию в тексте зеленого символа.

Ответы [ 8 ]

7 голосов
/ 12 апреля 2013

Начиная с ios 6 вы можете делать следующее:

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc]  initWithString:string];
[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,3)];
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(4,9)];
cell.label.attributedText = attributedString;
4 голосов
/ 29 ноября 2010

UILabel не поддерживает это свойство ...

Использование должно использовать NSAttributedString ... и использовать контроллеры для рисования NSAttributesString ...

Контроллер для NSAttributedString

UPDATE:

В iOS 6 вы можете делать следующее:

label.attributedText = attributedString;
2 голосов
/ 09 мая 2011

NSAttributedStrings поддерживают смешанные шрифты, стили и цвета в одной строке, но в настоящее время не поддерживаются никакими стандартными элементами управления UIKit.Тем не менее, вы должны проверить TTTAttributedLabel .Это простая и эффективная замена UILabel, которая позволит вам действительно легко отображать форматированный текст.

1 голос
/ 21 июня 2017

Swift 3 :

extension NSMutableAttributedString {
        func setColorForText(textToFind: String, withColor color: UIColor) {
         let range: NSRange = self.mutableString.range(of: textToFind, options: .caseInsensitive)
          if range != nil {
            self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
          }
        }

}


func setColoredLabel() {
        var string: NSMutableAttributedString = NSMutableAttributedString(string: "My label with red blue and green colored text")
        string.setColorForText(textToFind: "red", withColor: UIColor.red)
        string.setColorForText(textToFind: "blue", withColor: UIColor.blue)
        string.setColorForText(textToFind: "green", withColor: UIColor.green)
        mylabel.attributedText = string
    }

Результат:

enter image description here

1 голос
/ 30 ноября 2010

Другой альтернативный способ - создать несколько ярлыков разного цвета и расположить их рядом друг с другом. Попробуйте сделать цвет фона этикетки прозрачным. Это может быть утомительно, но должно работать.

1 голос
/ 29 ноября 2010

Нет - Apple говорит, что вы должны использовать HTML в UIWebView, если вам нужен форматированный текст. (См. Примечание в разделе обзора документации UITextView API .)

0 голосов
/ 29 ноября 2010

в настоящее время невозможно, обычно вы используете NSAttributedString, но для использования этого на iOS вам нужно будет свернуть свой собственный ярлык. возможно, вам удастся обойти это с помощью UIWebView, но мне не нравится это делать, это кажется неуклюже.

0 голосов
/ 29 ноября 2010

Нет, это невозможно - вам нужно рисовать самостоятельно или сочинять, используя несколько меток.

Если вы можете принять совместимость с 3.2, вы можете взглянуть на NSAttributedString.

...