观察UITextView子类中的文本

时间:2019-04-08 14:09:08

标签: swift text uitextview subclass

我想观察var文字! UITextView的属性,我不想使用委托。

我的解决方法是:

class MessageTextView: UITextView {

override var text: String! {
        didSet {
            print(text)
        }
    }
}

但是在UITextView的文本字段中键入时不会被调用。 我尝试了textStorage并选择了rangeRange。对我来说,仅覆盖文本是有意义的,但它不起作用。有解决办法吗?

编辑: 这是我的解决方案:

deinit {

        NotificationCenter.default.removeObserver(self, name: UITextView.textDidChangeNotification, object: nil)
    }

    func setObserverNotification() {
        NotificationCenter.default.addObserver(self, selector: #selector(updateText), name: UITextView.textDidChangeNotification, object: nil)
    }

    @objc private func updateText() {
      // Do updates here
    } 

1 个答案:

答案 0 :(得分:2)

  

对我来说,仅覆盖文本是有意义的,但它不起作用。

似乎不太可能UITextView实际设置您每次键入字符时都尝试覆盖的任何属性。文本视图的实际内容保存在UITextStorage对象中,该对象仅创建一次并根据需要进行修改,因此,textStorage设置方法的替代将最多调用一次,而不是每次键入时都被调用。 text设置器由于编辑而根本不会被调用-您可以调用它来获取或设置内容,但是编辑不会更改整个内容。

如果您想了解何时通知文本视图,但又不想使用委托,则可以改为监听通知。每当文本发生更改时,就会发送UITextViewTextDidChangeNotification