我想通过搜索突出显示所有匹配的单词。我写了代码,但是不能使用循环。当我搜索单词时,我的应用程序会找到单词并仅突出显示第一个单词。这是我的代码
var count = 0 let attributedText = NSMutableAttributedString(attributedString: txtMetin2.attributedText) let text2 = txtArama.text as NSString let text = txtMetin2.text as NSString var range:NSRange var checker:NSString = "" for(var i=0 ; i<text.length - text2.length-1 ; i++) { range = NSMakeRange(i, text2.length) checker = text.substringWithRange(range) if(text2 == checker) { count++ let highlightedRange = text.rangeOfString("\(text2)") attributedText.addAttribute(NSBackgroundColorAttributeName, value: UIColor.blueColor(), range: highlightedRange) let textAttachment = NSTextAttachment() let textAttachmentString = NSAttributedString(attachment: textAttachment) attributedText.appendAttributedString(textAttachmentString) txtMetin2.attributedText = attributedText } } println("\(count)")
我很快就很新。抱歉,编码错误。我的代码找到匹配项计数,但是如何突出显示所有匹配项,谢谢
基于NSRegularExpression的强制性解决方案。
let searchString = "this" let baseString = "This is some string that contains the word \"this\" more than once. This substring has multiple cases. ThisthisThIs." let attributed = NSMutableAttributedString(string: baseString) var error: NSError? let regex = NSRegularExpression(pattern: searchString, options: .CaseInsensitive, error: &error) if let regexError = error { println("Oh no! \(regexError)") } else { for match in regex?.matchesInString(baseString, options: NSMatchingOptions.allZeros, range: NSRange(location: 0, length: baseString.utf16Count)) as [NSTextCheckingResult] { attributed.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellowColor(), range: match.range) } textView.attributedText = attributed }