Я ищу способ изменить строковые атрибуты подстроки в редактируемом UITextView. Например, если пользователь начинает вводить текст внутри абзаца, как только начинается этот ввод, я хочу сделать весь абзац жирным, или его значение будет c, или какое-либо изменение цвета или стиля.
В настоящее время я 1. нахожу положение курсора 2. затем использую платформу естественного языка для токенизации всего текста в UITextView 3. и затем получаю диапазон символов в абзаце, в котором находится курсор в
Это дает мне тип SubString. Я могу преобразовать это в String для применения атрибутов, но я не выяснил, как применить эту атрибутную строку обратно в SubString и сделать так, чтобы она обновлялась в UITextView. Вот немного кода, который находит абзац.
func textViewDidChange(_ messagesTextView: UITextView) {
if let selectedRange = messagesTextView.selectedTextRange { //UITextRange
let cursorPosition = messagesTextView.offset(from: messagesTextView.beginningOfDocument, to: selectedRange.start) //Int
let index = messagesTextView.text?.index(messagesTextView.text!.startIndex, offsetBy: cursorPosition-1) // reduce cursorposition to detect the character right before the cursor.
let tokenizer = NLTokenizer(unit: .paragraph)
tokenizer.string = messagesTextView.text // tokenize the paragraphs in my live UITextView
let prange = tokenizer.tokenRange(at: index!) // select only the paragraph that my cursor is in
print(messagesTextView.text[prange]) // print the paragraph with String.Index, prange
let str = String(messagesTextView.text[prange])
}
Отсюда я мог бы определить строковые атрибуты и применить их к str, но я не понял, как поместить этот обновленный текст обратно в UITextView вместо исходного абзаца.
Я ценю любые предложения.