Swift — как добавить определенный приписываемый текст в конец обычного текста, не изменяя при этом атрибуты предыдущего текста в TextView

#swift #append #nsattributedstring

#быстрый #добавить #nsattributedstring

Вопрос:

Я пытаюсь добавить приписываемый текст в конец простого текста. Чтобы сделать это, я думаю, мне нужно сделать весь TextView.text атрибутивным, а затем установить TextView.attributedText = combination . Но когда я делаю это, весь текст в предыдущих строках приобретает меньший размер шрифта, я не понимаю, почему. Код приведен ниже:

 let attributedString = NSMutableAttributedString(string: "nANS = "   resultt   "n")
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: textView.font!.pointSize), range: NSRange(location: 0, length: 6))
let combination = NSMutableAttributedString(string: textView.text)
combination.append(attributedString)
textView.attributedText = combination
  

Комментарии:

1. let combination = NSMutableAttributedString(string: textView.text) => let combination = NSMutableAttributedString(attributedString: textView.attributedText) . Поскольку вы воссоздавали a NSAttributedString из a String , но у a String нет атрибутов для рендеринга, это просто простой список символов (для упрощения).

Ответ №1:

Вы потеряли приписываемые данные при создании combination .

 let attributedString = NSMutableAttributedString(string: "nANS = "   resultt   "n")
attributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: textView.font!.pointSize), range: NSRange(location: 0, length: 6))
// Pass the attributed string, not the plain one
let combination = NSMutableAttributedString(attributedString: textView.attributedText)
combination.append(attributedString)
textView.attributedText = combination
  

Комментарии:

1. спасибо, этот маленький трюк был тем, с чем я боролся 🙂

Ответ №2:

Создайте атрибуты

 let textColor = [NSAttributedString.Key.foregroundColor: <#T##color: UIColor##UIColor#>]
let linkColor = [NSAttributedString.Key.foregroundColor: <#T##color: UIColor##UIColor#>]
let termsLinkAttributes = [NSAttributedString.Key.link: <#T##yourLink: String##String#>]
let policyLinkAttributes = [NSAttributedString.Key.link: <#T##yourLink: String##String#>]
  

Добавьте атрибуты к различным частям текста

 let firstText = NSMutableAttributedString(string: <#T##yourText: String##String#>   " ",
                                              attributes: textColor)
let secondText = NSMutableAttributedString(string: <#T##yourText: String##String#>   " ",
                                              attributes: textColor)
let termsLink = NSMutableAttributedString(string: <#T##yourText: String##String#>   " ",
                                              attributes: termsLinkAttributes)
let policyLink = NSMutableAttributedString(string: <#T##yourText: String##String#>   ".",
                                              attributes: policyLinkAttributes)

let finalText = NSMutableAttributedString()
finalText.append(firstText)     
finalText.append(termsLink)     
finalText.append(secondText)
finalText.append(policyLink)
  

Примените его к вашему текстовому представлению

 <#T##yourTextView: UITextView##UITextView#>.delegate = self
<#T##yourTextView: UITextView##UITextView#>.linkTextAttributes = linkColor
<#T##yourTextView: UITextView##UITextView#>.attributedText = finalText