ios – 如何在textView中更改预先选择的单词的样式?

ios – 如何在textView中更改预先选择的单词的样式?,第1张

概述这是对这个问题 How can I change style of some words in my UITextView one by one in Swift?的跟进 感谢@Josh的帮助,我能够编写一段代码,突出显示以#开头的每个单词,并逐一进行.我的最终代码是: func highlight (to index: Int) { let regex = try? NSRegular 这是对这个问题 How can I change style of some words in my UITextView one by one in Swift?的跟进

感谢@Josh的帮助,我能够编写一段代码,突出显示以#开头的每个单词,并逐一进行.我的最终代码是:

func highlight (to index: Int) {    let regex = try? NSRegularExpression(pattern: "#(\w+)",options: [])    let matches = regex!.matches(in: hashtagExplanationTextVIEw.text,options: [],range: NSMakeRange(0,(hashtagExplanationTextVIEw.text.characters.count)))    let TitleDict: NSDictionary = [NSForegroundcolorAttributename: orangecolor]    let TitleDict2: NSDictionary = [NSForegroundcolorAttributename: UIcolor.red]    let storedAttributedString = NSMutableAttributedString(string: hashtagExplanationTextVIEw.text!,attributes: TitleDict as! [String : AnyObject])    let attributedString = NSMutableAttributedString(attributedString: storedAttributedString)    guard index < matches.count else {        return    }    for i in 0..<index{        let matchRange = matches[i].rangeAt(0)        attributedString.addAttributes(TitleDict2 as! [String : AnyObject],range: matchRange)    }    hashtagExplanationTextVIEw.attributedText = attributedString    if #available(iOS 10.0,*) {        let _ = Timer.scheduledTimer(withTimeInterval: 1,repeats: false) { _ in            self.highlight(to: index + 1)        }    } else {        dispatchQueue.main.asyncAfter(deadline: .Now() + 1) {            self.highlight(to: index + 1)        }    }}

这样可以正常工作,但我想更改逻辑,以便它不会突出显示#个单词,而是从这些单词的预选数组中突出显示(逐个)单词.

所以我有这个数组var myArray:[String] = [“那些”,“单词”,“是”,“突出显示”]我怎样才能在代码中使用它而不是正则表达式匹配?

解决方法 我相信你正在使用正则表达式获得一系列NSRange.在这里,您需要一个稍微不同的数据结构,如[String:[NSRange]].然后,您可以使用rangeOfString函数来检测单词所在的NSRange.您可以按照下面给出的示例:

let wordMatchArray:[String] = ["those","words","are","highlighted"]let labelText:Nsstring = Nsstring(string: "those words,those ldsnvldnvsdnds,are,highlighted,words are highlighted")let textLength:Int = labelText.lengthvar dictionaryForEachWord:[String : [NSRange]] = [:]for eachWord:String in wordMatchArray {   var prevRange:NSRange = NSMakeRange(0,0)   var rangeArray:[NSRange] = []   while ((prevRange.location + prevRange.length) < textLength) {      let start:Int = (prevRange.location + prevRange.length)      let rangeEach:NSRange = labelText.range(of: eachWord,options: Nsstring.CompareOptions.literal,range: NSMakeRange(start,textLength-start))      if rangeEach.length == 0 {         break      }      rangeArray.append(rangeEach)      prevRange = rangeEach   }   dictionaryForEachWord[eachWord] = rangeArray}

现在你有一个NSRange数组,即[NSRange]存储在字典中的每个单词,你可以在你的UITextVIEw中相应地突出显示每个单词.

如果您对实施有任何疑问,请随意发表评论:)

总结

以上是内存溢出为你收集整理的ios – 如何在textView中更改预先选择的单词的样式?全部内容,希望文章能够帮你解决ios – 如何在textView中更改预先选择的单词的样式?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1051108.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存