Как проще всего сделать этикетку разных цветов?
Например, я хочу представить сообщение:
"Джон Джонсон отправил вам сообщение"
Но я хочу, чтобы John Johnson
был синим цветом
, а остальная часть сообщения — черным цветом.
Как проще всего сделать этикетку разных цветов?
Например, я хочу представить сообщение:
"Джон Джонсон отправил вам сообщение"
Но я хочу, чтобы John Johnson
был синим цветом
, а остальная часть сообщения — черным цветом.
В UILabel в принципе невозможно. Если вы хотите этого, вы должны переопределить drawTextInRect
. Но я рекомендую OHAttributedLabel. у этого есть attributeString, это textcolor, который может быть установлен для указания диапазона.
Вам нужен класс NSAttributedString
(или изменяемый — NSMutableAttributedString
) для установки атрибутов (например, шрифта и кернинга), которые применяются к отдельным символам или диапазонам символов в строке и пользовательскому элементу управления меткой который может визуализировать NSAttributedString
как TTTAttributedLabel.
Используйте UIWebView
.
webView.text =
@"<span style:\"color:blue;\">John Johnson</span> sent you a message.";
Для этого я создал расширение 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];
Попробуйте это с быстрым (выполните код со следующим расширением)
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)
Вот результат: