观察UITextView子类中的文本

问题描述 投票:1回答:1

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

我的解决方案是:

class MessageTextView: UITextView {

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

但是在UITextView的文本字段中键入时不会调用它。我也试过了textStorage和selectedRange。对我来说,覆盖文本才有意义,但它不起作用。有解决方案吗

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

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
    } 
swift text uitextview subclass
1个回答
2
投票

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

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

如果您想知道何时通知文本视图但不想使用委托,那么您可以改为监听通知。只要文本发生变化,就会发送UITextViewTextDidChangeNotification

© www.soinside.com 2019 - 2024. All rights reserved.