用属性文本替换文本并向其添加操作

Posted

技术标签:

【中文标题】用属性文本替换文本并向其添加操作【英文标题】:Replace text with attributed text and add action to it 【发布时间】:2017-05-23 17:52:23 【问题描述】:

我有字符串数组[apple,mango,banana,kiwi,orange] 当用户在 textview 上键入时,如果最后一个单词与数组中的任何单词匹配,则它应该加下划线并添加轻击手势。 我正在使用

         func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool  
let lastword = textviewtext.lastword()//i have last word i have to replace

        if myarray.contains(lastword) 
    //here code for replacing the text and underline it and add tap gesture 
    

如何做到这一点 示例 - 用户如果输入 - “orange apple are good for health” 这里橙子和苹果应该加下划线,并且应该通过一些操作启用点击。比如带有“orange”的警报轻拍”或“苹果轻拍”

【问题讨论】:

【参考方案1】:

要为某些单词添加下划线,您需要使用rangeOfString 在文本视图中获取该单词的 NSRange 并创建一个新的属性字符串以应用于文本视图。这是一个例子:

let at = NSMutableAttributedString(string: textView.text)
words.forEach  word in
    if let range = textView.text.range(of: word) 
        at.addAttribute(NSUnderlineColorAttributeName, value: UIColor.red, range: range)
    


textView.attributedText = at

要识别何时点击了单词,请参阅this answer。

【讨论】:

如何在用户输入文本时执行此操作 @AkashShindhe,您可以将此代码放入您已有的方法中 它不起作用 - 无法将类型“Range”(又名“Range”)的值转换为预期的参数类型“NSRange”(又名“_NSRange” )

以上是关于用属性文本替换文本并向其添加操作的主要内容,如果未能解决你的问题,请参考以下文章

用图形替换文本链接(导航)

XSLT 替换属性值和文本节点中的文本

如何删除数据框列中的空格并向其添加字符串“NA”?

正则表达式笔记——用正则表达式处理文本

替换部分 UITextView 的属性文本

vim 实栗 :替换重复文本