【问题标题】:Observe text in subclass of UITextView观察 UITextView 子类中的文本
【发布时间】:2019-04-08 14:09:07
【问题描述】:

我想观察 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】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-06
      • 1970-01-01
      • 2016-03-08
      • 2018-07-11
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多