Swift 从shouldChangeTextIn更新UITextView值将返回字符两次

Swift 从shouldChangeTextIn更新UITextView值将返回字符两次,swift,uitextview,hashtag,Swift,Uitextview,Hashtag,我想在用户在UITextView中键入文本时在UITextView中实现HasTag 为此,我尝试了以下代码 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { if text == "\n" { self.txtB.resignFirstResponder() return f

我想在用户在UITextView中键入文本时在UITextView中实现HasTag

为此,我尝试了以下代码

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" {
        self.txtB.resignFirstResponder()
        return false
    }

    let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
    let numberOfChars = newText.count

    self.txtB.attributedText = CommonHelper.sharedInstance.convert(self.txtB.text.findMentionText(), string: self.txtB.text)
    return numberOfChars < 121 //120 limit
}
如果我键入单个字符,则textview将该字符重复两次

如何解决此问题?

在下面的几行中

self.txtBeep.attributedText = CommonHelper.sharedInstance.convert(self.txtB.text.findMentionText(), string: self.txtB.text)

return numberOfChars < 121 //120 limit

self.txtBeep是同一文本视图吗?@PGDev,是的self.txtB是我的文本视图。我如何解决我的问题并保持120个字符的限制以及hastag?如果我在上面一行写,键入的字符不是第二次键入。比如如果我输入A,然后再次尝试输入A,那么它不会输入。更新了答案。现在我可以输入重复字符了,但是hastag值textcolor不正确。如果我键入virat,则橙色仅应用于vira,而不应用于tRight。调用convert方法时传递newText。看看答案。
self.txtBeep.attributedText = CommonHelper.sharedInstance.convert(self.txtB.text.findMentionText(), string: self.txtB.text)

return numberOfChars < 121 //120 limit
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    if text == "\n" {
        self.txtB.resignFirstResponder()
        return false
    }

    let newText = (textView.text as NSString).replacingCharacters(in: range, with: text)
    let numberOfChars = newText.count
    if numberOfChars > 120 {
        return false
    }

    self.txtB.attributedText = CommonHelper.sharedInstance.convert(newText.findMentionText(), string: newText)
    return false
}