ardacankaya ardacankaya - 1 year ago 93
Swift Question

Uitextview highlight all matches swift

i want to highlight all matches word with searching. i wrote code but i couldn't use loop. when i search a word, my app find words and highlight only first word. here is my code

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)
let highlightedRange = text.rangeOfString("\(text2)")
attributedText.addAttribute(NSBackgroundColorAttributeName, value: UIColor.blueColor(),
range: highlightedRange)
let textAttachment = NSTextAttachment()
let textAttachmentString = NSAttributedString(attachment: textAttachment)
txtMetin2.attributedText = attributedText



i am very new at swift. sorry for bad coding. my codes find matches count but how can i highlight all matches thank you

Answer Source

Obligatory NSRegularExpression based solution.

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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download