【发布时间】:2020-10-06 16:57:30
【问题描述】:
我想监听 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”。
步骤 2: 重要步骤。双击字段选择所有文本。
第 3 步:从单词建议中选择“如果”。
调试器输出中没有“If”。另一方面,如果插入符号位于“I”字的末尾,我们选择“如果”输出结果是正确的。
有什么方法可以观察所有的文字变化吗?
我可以通过以下方式获取文本:
func textViewDidEndEditing(_ textView: UITextView)
但我需要实时观察所有变化。我经常看到的另一个选项是使用:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool
但是这种方法是观察变化的不好的做法。如果您重复输入两个空格,iOS 会将第一个空格替换为点,并且显然不会通知您此方法中的此操作以及许多其他问题。
【问题讨论】:
标签: ios uikit uitextview uitextviewdelegate uitextinput