我目前正在制作类似Facebook的标记视图,即用户在@name中输入,并且视图正在过滤与@name匹配的人的姓名。当用户点击该视图中的名称时,当前键入的单词(在本例中为@name)将替换为已点击用户的名称。例如,假设我输入@joh我将收到“John Doe”的建议,我将继续点击。现在@joh被John Doe取代。这很好。
但是,我还想使用NSAttributedString使“John Doe”成为不同的背景颜色,我也有代码来执行此操作。然而,我遇到的问题是用户可能没有完成输入,并且在添加NSBackgroundAttribute后输入的每个字符都会导致所有以下文本接收相同的背景颜色。
我已经检查了我的范围,当我添加NSAttribute时,它被设置为,在这个例子中与John Doe一起开始: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的后续字符将具有相同的背景颜色。