Изменение цвета текста в textview

#swift #textview #nsattributedstring

#swift #textview #nsattributedstring

Вопрос:

У меня есть textview, который объединяет несколько строк, каждая из которых разделена новой строкой. У каждой строки также есть заголовок, который я бы хотел отобразить другим цветом и выделить жирным шрифтом.

Код, который у меня есть на данный момент, выглядит следующим образом:

 let summaryText = "Summary n"
let summaryAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange]
let summaryString = NSAttributedString(string: summaryText, attributes:summaryAttributes)

GoalSettingDetailsTextView.attributedText = summaryString   GoalSettingMoreDetailsSummary   "nn"   "Notes n"   GoalSettingMoreDetailsNotes
  

Здесь вы можете видеть, что я попытался сделать «Сводку» оранжевой. Я также попытался отобразить заголовок «Примечания» как обычную строку без каких-либо атрибутов. Эта часть работает нормально. Однако я получаю ошибку с «summaryString».

Ошибка заключается:

Двоичный оператор ‘ ‘ не может быть применен к операндам типа ‘NSAttributedString’ и ‘String’

Как я могу заставить это работать?

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

1. Используйте NSMutableAttributedString и его свойство append.

Ответ №1:

Вы не можете использовать для добавления с NSAttributedString .

Создайте NSMutableAttributedString и создайте его.

 let attrStr = NSMutableAttributedString(attributedString: summaryString)
attrStr.append(GoalSettingMoreDetailsSummary) // not sure what GoalSettingMoreDetailsSummary is
attrStr.append(NSAttributedString(string: "nnNotes n"))
attrStr.append(GoalSettingMoreDetailsNotes) // not sure what GoalSettingMoreDetailsNotes is

GoalSettingDetailsTextView.attributedText = attrStr
  

Этот код предполагает, что GoalSettingMoreDetailsSummary и GoalSettingMoreDetailsNotes имеют тип NSAttributedString . Если они просто, String то создайте NSAttributedString из них, как я сделал с буквенной строкой.

Ответ №2:

Взгляните на Prestyler. Вы можете просто написать что-то вроде этого:

 Prestyler.defineRule("$", Prestyle.bold, UIColor.red)
label.attributedText = ("$My title$"   nextText).prestyled