【发布时间】:2016-02-02 00:21:20
【问题描述】:
我想更改 UITextView 中与数组索引匹配的特定文本的文本颜色。我可以稍微修改这个answer,但不幸的是每个匹配短语的文本颜色只改变了一次。
var chordsArray = ["Cmaj", "Bbmaj7"]
func getColoredText(textView: UITextView) -> NSMutableAttributedString {
let text = textView.text
let string:NSMutableAttributedString = NSMutableAttributedString(string: text)
let words:[String] = text.componentsSeparatedByString(" ")
for word in words {
if (chordsArray.contains(word)) {
let range:NSRange = (string.string as NSString).rangeOfString(word)
string.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: range)
}
}
chords.attributedText = string
return string
}
结果
【问题讨论】:
-
NSAttributedString是您的答案。对要着色的部分使用颜色属性并将其设为一个字符串。将 rest 放在普通的属性字符串中。现在结合两个属性字符串。 -
@NSNoob 不想打扰你,但你能举个例子吗?我很难理解如何将包含的文本和纯文本拆分为两个不同的 NSAttrubttedStrings。
-
你在编辑textView吗?我能看到下面的键盘吗?因此,我假设您想在用户输入 chords 数组中定义的那些关键字时为文本着色?刚刚注意到键盘所以我假设你真正想要的是我刚才描述的?在数据输入时重新着色?
-
是的,我是,这是正确的@NSNoob
-
是的,该函数正在 textdidchange 上调用
标签: swift uitextview swift2.1