ios - 在 swift 中为所有出现的字符串着色

标签 ios swift nsstring nsmutableattributedstring

这段代码

var textSearch="hi"
var textToShow="hi hihi hi" 
var rangeToColor = (textToShow as NSString).rangeOfString(textSearch)
var attributedString = NSMutableAttributedString(string:textToShow)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.yellowColor() , range: rangeToColor)
TextView.attributedText=attributedString

给我 NSRange 来为 TextView 中的字符串着色。 问题是我只返回第一次出现。 如果单词包含“hi hihi hi”,则只有第一个“hi”是彩色的。 我怎样才能得到所有出现的字符串?

最佳答案

swift 5

let attrStr = NSMutableAttributedString(string: "hi hihi hey")
let inputLength = attrStr.string.count
let searchString = "hi"
let searchLength = searchString.characters.count
var range = NSRange(location: 0, length: attrStr.length)

while (range.location != NSNotFound) {
    range = (attrStr.string as NSString).range(of: searchString, options: [], range: range)
    if (range.location != NSNotFound) {
        attrStr.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.yellow, range: NSRange(location: range.location, length: searchLength))
        range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
    }
}

swift 3

let attrStr = NSMutableAttributedString(string: "hi hihi hey")
let inputLength = attrStr.string.characters.count
let searchString = "hi"
let searchLength = searchString.characters.count
var range = NSRange(location: 0, length: attrStr.length)

while (range.location != NSNotFound) {
    range = (attrStr.string as NSString).range(of: searchString, options: [], range: range)
    if (range.location != NSNotFound) {
        attrStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.yellow(), range: NSRange(location: range.location, length: searchLength))
        range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
    }
}

swift 2

let attrStr = NSMutableAttributedString(string: "hi hihi hey")
let inputLength = attrStr.string.characters.count
let searchString = "hi"
let searchLength = searchString.characters.count
var range = NSRange(location: 0, length: attrStr.length)

while (range.location != NSNotFound) {
    range = (attrStr.string as NSString).rangeOfString(searchString, options: [], range: range)
    if (range.location != NSNotFound) {
        attrStr.addAttribute(NSForegroundColorAttributeName, value: UIColor.yellowColor(), range: NSRange(location: range.location, length: searchLength))
        range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
    }
}

关于ios - 在 swift 中为所有出现的字符串着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27180184/

相关文章:

ios - 如何从自定义 View 过渡到 AVPlayerViewController?

c# - Xamarin/Mvvmcross : Open a different view controller when a iOS push notification is received

swift - 在 swift 中将映射应用到 JSON 数组

ios - 我希望我的文本在空白处延伸

ios - Xcode 6.3.2 - iOS - 使用自动布局定位图像和文本

arrays - 根据某些条件对对象数组进行排序

json - 根据嵌套字符串的值过滤 JSON

ios - Swift 中的 "Extra argument in call"错误

iOS - NSString 正则表达式匹配

ios - 将另一个 ViewController 传递的值分配给字符串时出现问题