Раньше мне приходилось делать именно это по соображениям удобства.Моя стратегия состояла в том, чтобы создать подкласс UILabel
, а затем переопределить элемент text
, изменить текст и установить attributedText
метки (фактически перезаписывая исходный текст).Примерно так:
/// Custom label that autoformats its text content. Use "@" to denote bolded ranges.
class AutoformatLabel: UILabel {
// The special char that denotes bolded ranges.
private let kSpecialChar: String = "@"
// Set your font size and which fonts you want to use for bold/regular, here.
var boldedFont = UIFont.boldSystemFont(ofSize: 18.0)
var regularFont = UIFont.systemFont(ofSize: 18.0)
/// Usage:
/// label.text = "Regular text @bolded text@ back to regular"
public override var text: String? {
didSet {
let attributedText = NSMutableAttributedString(string: "")
let paragraphStyle = NSMutableParagraphStyle()
// Add things like line spacing, etc. to your paragraphStyle here, if desired.
paragraphStyle.alignment = self.textAlignment
let phrases = text!.split(separator: kSpecialChar)
for i in 0...(phrases.count - 1) {
let attPhrase = NSMutableAttributedString(string: String(phrases[i]))
if i % 2 != 0 {
attPhrase.addAttribute(NSAttributedStringKey.font, value: boldedFont, range: NSRange(location: 0, length: attPhrase.length))
} else {
attPhrase.addAttribute(NSAttributedStringKey.font, value: regularFont, range: NSRange(location: 0, length: attPhrase.length))
}
attributedText.append(attPhrase)
}
attributedText.addAttribute(NSAttributedString.Key.paragraphStyle, value: paragraphStyle, range: NSMakeRange(0, attributedText.length - 1))
self.attributedText = attributedText
}
}
}
Вы можете изменить, какой символ вы хотите использовать для обозначения жирных диапазонов, установив постоянную kSpecialChar
на любое значение.Надеюсь, что это поможет!
РЕДАКТИРОВАТЬ: Неправильный вопрос!Вот фрагмент кода, который вы ищете:
let text = "changed your user role"
let boldedText = "user"
let boldedRange = text.range(of: "user")
let attributedText = NSMutableAttributedString(string: text)
attributedText.addAttribute(NSAttributedStringKey.font, value: boldedFont, range: NSRange(location: boldedRange.lowerBound, length: boldedRange.upperBound - boldedRange.lowerBound))
myLabel.attributedText = attributedText