
感谢@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中更改预先选择的单词的样式?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)