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
}