Цель c — Несколько цветов на этикетке

Как проще всего сделать этикетку разных цветов?

Например, я хочу представить сообщение:
"Джон Джонсон отправил вам сообщение"

Но я хочу, чтобы John Johnson был синим цветом
, а остальная часть сообщения — черным цветом.


person Eyal    schedule 14.08.2012    source источник
comment
Я бы назвал это ошибкой Apple. Мы действительно должны иметь возможность использовать строки с атрибутами в iOS. Скрестим пальцы, они включат его в будущий релиз.   -  person jrturton    schedule 14.08.2012
comment
кашель посмотрите документацию по iOS6 кашель   -  person Paul de Lange    schedule 14.08.2012


Ответы (6)


В UILabel в принципе невозможно. Если вы хотите этого, вы должны переопределить drawTextInRect. Но я рекомендую OHAttributedLabel. у этого есть attributeString, это textcolor, который может быть установлен для указания диапазона.

person bitmapdata.com    schedule 14.08.2012
comment
Спасибо, я воспользуюсь вашим решением :) - person Eyal; 14.08.2012

Вам нужен класс NSAttributedString (или изменяемый — NSMutableAttributedString) для установки атрибутов (например, шрифта и кернинга), которые применяются к отдельным символам или диапазонам символов в строке и пользовательскому элементу управления меткой который может визуализировать NSAttributedString как TTTAttributedLabel.

person graver    schedule 14.08.2012

Используйте UIWebView.

webView.text = 
  @"<span style:\"color:blue;\">John Johnson</span> sent you a message.";
person Mundi    schedule 14.08.2012

Используйте CoreText. Надеюсь это поможет.

person Mathew Varghese    schedule 14.08.2012

Для этого я создал расширение UILabel. По сути, он использует NSAttributedString для определения цвета для определенного диапазона: https://github.com/joaoffcosta/UILabel-FormattedText

Если вы хотите реализовать это поведение самостоятельно, просто сделайте следующее:

NSMutableAttributedString *text = [[NSMutableAttributedString alloc] initWithAttributedString: @"John Johnson sent you a message"];
[text addAttribute: NSFontAttributeName
             value: font
             range: range];
[self setAttributedText: text];
person João Costa    schedule 04.03.2013

Попробуйте это с быстрым (выполните код со следующим расширением)

extension NSMutableAttributedString {

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

}

Попробуйте расширение с UILabel:

let label = UILabel()
label.frame = CGRect(x: 40, y: 100, width: 280, height: 200)
let stringValue = "John Johnson sent you a message"  // or direct assign single string value like "firstsecondthird"
label.textColor = UIColor.lightGray
label.numberOfLines = 0
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColorForText(textToFind: "John Johnson", withColor: UIColor.blue)
label.font = UIFont.systemFont(ofSize: 26)
label.attributedText = attributedString
self.view.addSubview(label)

Вот результат:

введите здесь описание изображения

person Krunal    schedule 24.10.2017