代码之家  ›  专栏  ›  技术社区  ›  Anters Bear

在textViewDidChange中检测粘贴UITextView

  •  1
  • Anters Bear  · 技术社区  · 6 年前

    我正在创建一个 UITextView 用作基本IDE。当用户粘贴文本(代码)时,我正在修改它,使其与其他文本内联(正确缩进)。不过,我也在给文本着色( attributedText )使用 textViewDidChange 方法。因此,当我粘贴文本时,它首先被插入,然后进行内联调整。这个过程看起来有点奇怪,尤其是对于一大堆文本。我想知道有没有办法让我知道这篇文章是被粘贴进去的 文本视图更改 以避免在修改文本之前运行属性更改。注意,的 textView shouldChangeTextIn 方法是不可能的,因为我正在通过两个方法的交互实现一些自定义行为,并且需要在 舞台。

    示例设置

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        if (text == UIPasteboard.general.string) {
            // MODIFY PASTABLE TEXT HERE
    
            // INSERT MODIFIED TEXT
            textView.replace(textRange, withText: newText)
    
            // PREVENT OLD TEXT FROM BEING INSERTED
            return false
        }
    }
    
    func textViewDidChange(_ textView: UITextView) {
        // MANAGE ATTRIBUTES
    }
    

    奇怪的行为

    enter image description here

    0 回复  |  直到 6 年前