Поскольку пользователь вводит текстовое представление, я просматриваю каждое слово и вижу, что оно соответствует словам в массиве, который у меня есть. Если есть совпадение, слово меняется на синий, а булева переменная didFindACertainWord
устанавливается в true (чтобы убедиться, что только одно слово синее). Я смог успешно выполнить эту часть с несколькими ошибками:
Определенное слово, которое я изменил на синий, работает, но слова, набранные до шрифта, меняются, и все, что я печатаю после слова, тоже синего цвета (что мне не нужно). Я хочу изменить только определенное слово на синий, оставив остальные слова черным цветом и тем же шрифтом, что и раньше.
Не могу понять, как узнать, удалил ли пользователь определенное слово. Если они это сделают, Я хочу изменить цвет определенного слова обратно на черный (после того, как они удалили первый символ определенного слова) и установить didFindACertainWord
в false.
Вот мой текущий код в моем textViewDidChange
методе:
func textViewDidChange(_ textView: UITextView) {
//get last word typed
let size = textView.text.reversed().firstIndex(of: " ") ?? textView.text.count
let startWord = textView.text.index(textView.text.endIndex, offsetBy: -size)
let lastWord = textView.text[startWord...]
//check if last word is in array and we did not already find one
if certainWords.contains(String(lastWord)) && !didFindACertainWord {
didFindACertainWord = true
//change color of the word
let attributedString = NSMutableAttributedString.init(string: textView.text)
let range = (textView.text as NSString).range(of: String(lastWord))
attributedString.addAttributes([NSAttributedString.Key.foregroundColor: UIColor.blue, NSAttributedString.Key.font: UIFont(name: "Avenir-Roman", size: 18)], range: range)
textView.attributedText = attributedString
}
}
Чего мне не хватает / как я могу сделать это успешно? Постскриптум шрифт всего текста в текстовом представлении должен быть UIFont(name: "Avenir-Roman", size: 18)
Я ищу каждое слово, потому что после того, как пользователь набирает слово действия, мне нужно прочитать следующие слова, если они связаны со словом действия, чтобы выделить их жирным шрифтом. Например, если пользователь вводит «см. Париж Лондон Берлин, чтобы найти лучшую еду», словом действия является «см.», И связанные слова, которые должны быть выделены жирным шрифтом, это места «Париж Италия Франция» и слова не связанные (будут в обычном порядке). шрифт) "найти лучшее"