在UITextView中检测用户输入(除了委托)

问题描述:

我在继承UITextView并希望处理其中的用户输入。这不是一个利用委派的选择,因为应该可以将代表设置为不同的代理。任何人都知道我该怎么做到这一点?在UITextView中检测用户输入(除了委托)

对此有一个解决方法。您可以使用UITextViewTextDidChange通知。

class UITextViewPlus: UITextView { 

    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     NotificationCenter.default.addObserver(self, selector: #selector(textChange(_:)), name: .UITextViewTextDidChange, object: nil) 
    } 

    func textChange(_ sender: NSNotification) { 
     guard let textView = sender.object as? UITextViewPlus, textView == self else { 
      // ignoring text change of any other UITextView 
      return 
     } 

     // do something 
    } 

    deinit { 
     NotificationCenter.default.removeObserver(self) 
    }  
} 

注:只要记住UITextViewTextDidChange通知发布于任何UITextView任何文本变化。