iOS复制从Pasteboard粘贴文本一段时间可以正常工作,一段时间后在textview中消失

问题描述

我已经实现了从UI粘贴板复制粘贴,然后显示前300个字符。我从复制粘贴中禁用了表情符号,问题仅在第一次出现时才出现,在此之后一切正常。它可以正常工作一段时间,但有时可以正确粘贴,并在一段时间后删除粘贴的文本。 iOS 12,13.6中存在相同问题

这是我的代码:-

    func textView(_ textView: UITextView,shouldChangeTextIn range: NSRange,replacementText text: String) -> Bool {
        
                if let paste = UIPasteboard.general.string,text == paste {
                    print("paste")
                    if (textView.text + text).containsEmoji(){
                        return false
                    }else{
                        return true
                    }
               }
               return textView.text.count + (text.count - range.length) <= 300}
    
    
        func textViewDidChange(_ textView: UITextView){
        if textView.text.count >= 300{
            let trimstring = String(textView.text.prefix(300))
           textView.text = trimstring
           }
        }

解决方法

如果您只需要前300个字符,则您的前缀函数应采用'300'而不是'320'...

func textViewDidChange(_ textView: UITextView){
    if textView.text.count >= 300{
        let trimString = String(textView.text.prefix(300)) // <- try this
       textView.text = trimString
    }
}

编辑

此外,如果您不想将字符串替换为与剪贴板不匹配的内容,则“ shouldChangeTextIn”中的最后一个return语句应为false。那可能是你的问题。