swift – UITextView更改特定文本的文本颜色

我想更改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
}

结果

对不起,我刚注意到你的消息.这是一个工作示例(在操场上测试):
import UIKit


func apply (string: NSMutableAttributedString,word: String) -> NSMutableAttributedString {
    let range = (string.string as Nsstring).rangeOfString(word)
    return apply(string,word: word,range: range,last: range)
}

func apply (string: NSMutableAttributedString,word: String,range: NSRange,last: NSRange) -> NSMutableAttributedString {
    if range.location != NSNotFound {
        string.addAttribute(NSForegroundColorAttributeName,range: range)
        let start = last.location + last.length
        let end = string.string.characters.count - start
        let stringRange = NSRange(location: start,length: end)
        let newRange = (string.string as Nsstring).rangeOfString(word,options: [],range: stringRange)
        apply(string,range: newRange,last: range)
    }
    return string
}

var chordsArray = ["Cmaj","Bbmaj7"]
var text = "Cmaj Bbmaj7 I love Swift Cmaj Bbmaj7 Swift"
var newText = NSMutableAttributedString(string: text)

for word in chordsArray {
    newText = apply(newText,word: word)
}

newText

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...