Ios 将文本属性应用于特定字符串的所有匹配项

Ios 将文本属性应用于特定字符串的所有匹配项,ios,string,swift,Ios,String,Swift,我正在应用一个文本属性字符串“Updated-” 我希望这适用于字符串的所有出现,而不仅仅是一个 尝试 var attributedText: NSMutableAttributedString = NSMutableAttributedString(string: textView.text) let stringRange = (textView.text as NSString).rangeOfString("Updated - ")

我正在应用一个文本属性
字符串
“Updated-”

我希望这适用于字符串的所有出现,而不仅仅是一个

尝试

var attributedText: NSMutableAttributedString = NSMutableAttributedString(string: textView.text)
             let stringRange = (textView.text as NSString).rangeOfString("Updated - ")


             if (stringRange.location != NSNotFound) {

                    attributedText.addAttributes([NSFontAttributeName: UIFont.italicSystemFontOfSize(8.0)],range: stringRange)
                    textView.attributedText = attributedText

            }
这仍然只将属性文本应用于
字符串的一个匹配项

类似问题

更新

var attributedText: NSMutableAttributedString = NSMutableAttributedString(string: textView.text)
             var inputLength = count(attributedText.string)
             let stringRange = "Updated - "

             var searchLength = count(stringRange)
             var range = NSRange(location: 0, length: attributedText.length)

             while (range.location != NSNotFound) {

                range = (attributedText.string as NSString).rangeOfString("Updated - ", options: nil, range: range)

                if (range.location != NSNotFound) {
                     attributedText.addAttribute(NSForegroundColorAttributeName, value: UIFont.italicSystemFontOfSize(8.0), range: NSRange(location: range.location, length: searchLength))
                    range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
                }
             }

 textView.attributedText = attributedText

您必须循环浏览文本中“Updated-”的所有实例,并获取它们的范围。一种方法是这样做(根据您的问题定制):


您必须循环浏览文本中“Updated-”的所有实例,并获取它们的范围。一种方法是这样做(根据您的问题定制):


这里是返回字符串出现范围数组的代码。我只使用了另一个编码员的代码。然后你可以在这些范围内循环。我只是将代码推广到其他用途

斯威夫特3


这里是返回字符串出现范围数组的代码。我只使用了另一个编码员的代码。然后你可以在这些范围内循环。我只是将代码推广到其他用途

斯威夫特3


利用字符串扩展更新了@Khaled Annajar对Swift 4的回答:

extension String {

func ranges(subString: String) -> [NSRange] {
    var ranges = [NSRange]()
    var range = NSRange(location: 0, length: count)
    while range.location != NSNotFound {
        range = (self as NSString).range(of: subString, options: .caseInsensitive, range: range)
        if range.location != NSNotFound {
            ranges.append(range)
            range = NSRange(location: range.location + range.length,
                            length: count - (range.location + range.length))
        }
    }
    return ranges
}

}

利用字符串扩展更新了@Khaled Annajar对Swift 4的回答:

extension String {

func ranges(subString: String) -> [NSRange] {
    var ranges = [NSRange]()
    var range = NSRange(location: 0, length: count)
    while range.location != NSNotFound {
        range = (self as NSString).range(of: subString, options: .caseInsensitive, range: range)
        if range.location != NSNotFound {
            ranges.append(range)
            range = NSRange(location: range.location + range.length,
                            length: count - (range.location + range.length))
        }
    }
    return ranges
}

}

已更新,仍无法按预期工作,无属性now@JSA986您必须在textView上设置attributedTex属性。我还更新了.addAttribute以匹配您想要的效果。现在应该可以了。仍然一样,文本根本没有属性化
-[UICTFont set]:无法识别的选择器发送到实例
@JSA986。我认为.addAttributes中有错误。我想我已经改正了。试试看。太棒了,就是这样,谢谢你的帮助,加上1!已更新,仍无法按预期工作,无属性now@JSA986您必须在textView上设置attributedTex属性。我还更新了.addAttribute以匹配您想要的效果。现在应该可以了。仍然一样,文本根本没有属性化
-[UICTFont set]:无法识别的选择器发送到实例
@JSA986。我认为.addAttributes中有错误。我想我已经改正了。试试看。太棒了,就是这样,谢谢你的帮助,加上1!
func rangesOf(subString: String) -> [NSRange] {
    var ranges = [NSRange]()

    var range: NSRange = NSMakeRange(0, self.characters.count)
    while (range.location != NSNotFound) {
        range = (self as NSString).range(of: subString, options: .caseInsensitive, range: range)
        if (range.location != NSNotFound) {
            ranges.append(range)
            range = NSRange(location: range.location + range.length, length: self.characters.count - (range.location + range.length))
        }
    }
    return ranges
}
extension String {

func ranges(subString: String) -> [NSRange] {
    var ranges = [NSRange]()
    var range = NSRange(location: 0, length: count)
    while range.location != NSNotFound {
        range = (self as NSString).range(of: subString, options: .caseInsensitive, range: range)
        if range.location != NSNotFound {
            ranges.append(range)
            range = NSRange(location: range.location + range.length,
                            length: count - (range.location + range.length))
        }
    }
    return ranges
}