UITextView观察文本变化

问题描述 投票:0回答:2

我想听UITextView中的每个文本更改。设置非常简单。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    NotificationCenter.default.addObserver(
        self,
        selector: #selector(textViewDidChangeWithNotification(_:)),
        name: UITextView.textDidChangeNotification,
        object: nil
    )
}

@objc private func textViewDidChangeWithNotification(_ notification: Notification) {
     print("Text: \(String(describing: inputTextView.text))")
}

[在大多数情况下可以正常工作,但是后来我发现了一些UITextInput的黑匣子魔术。

步骤1:输入“ I”。我们可以在输出中看到“ I”。步骤2:重要步骤。双击该字段选择所有文本。步骤3:从字词建议中选择“如果”。

enter image description here

并且调试器输出中没有'If'。另一方面,如果插入号位于'I'字的末尾,我们选择'If',则输出结果正确。

enter image description here

有没有办法观察所有文本的变化?

我可以使用以下方式获取文本:

func textViewDidEndEditing(_ textView: UITextView)

但是我需要实时观察所有变化。我经常看到的另一个选项是使用:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool

但是此方法是观察更改的不良做法。如果您重复键入两个空格,iOS会用点替换第一个空格,并且显然不会通知您此方法的操作以及与此相关的许多其他问题。

ios uikit uitextview uitextviewdelegate uitextinput
2个回答
1
投票

您是否尝试过func textViewDidChange(_ textView: UITextView)


0
投票

如果您想聆听每一个变化,可以选择shouldChangeTextIn。您可以编写条件来解决与之相关的问题

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