NSAttributedString для текущего набранного текста
В настоящее время я делаю представление тегов в стиле Facebook, то есть пользователь вводит @name, а представление фильтрует имена людей, которые совпадают с @name. Когда пользователь нажимает на имя в этом представлении, текущее набранное слово, в данном случае @name, будет заменено именем прослушиваемого пользователя. Например, допустим, я набрал @joh, и я получу предложение "Джон Доу", к которому я приступлю. Теперь @joh заменен на Джона Доу. Это отлично работает.
Однако я также хотел бы сделать "Джон Доу" другим цветом фона, используя NSAttributedString, и у меня есть код, чтобы сделать это также. Однако проблема, с которой я сталкиваюсь, заключается в том, что пользователь может не завершить набор текста, и каждый отдельный символ, набранный после добавления NSBackgroundAttribute, приводит к тому, что весь следующий текст получает одинаковый цвет фона.
Я проверил свой диапазон, когда я добавляю NSAttribute, и он установлен, в этом примере с Джоном До, для начала: 0 и конца: 8, но даже в этом случае я все еще получаю цвет фона для символов, которые находятся на локации выше 8. Что мне здесь не хватает?
Код
let tappedUserName = user.name
let myRange = (textView.text as NSString).rangeOfString(tappedUserName)
let attribute = [NSBackgroundColorAttributeName: UIColor.blueColor()]
let myString = NSMutableAttributedString(string: textView.text)
myString.setAttributes(attribute, range: myRange)
textView.attributedText = myString
После выполнения этого кода я продолжаю вводить следующие символы UITextView будут иметь тот же цвет фона.