键入

时间:2019-07-17 15:09:17

标签: uiinputviewcontroller

我正在构建自定义键盘库,并希望为其添加自动完成功能。为此,我需要检测用户输入的时间。

UIInputViewController提供了两个用于检测文本更改的功能:textWillChangetextDidChange。但是,当用户类型和文本发送到代理时,不会调用它们。

我正在使用Xcode 10.2.1,可以在模拟器和真实设备上重现此代码。我可以在自定义键盘库项目和全新的测试项目中重新创建它。

问题是这样的:当您使用textWillChange将文本发送到文本文档代理时,不会调用textDidChangetextDocumentProxy.insertText("something")。但是,如果更改光标位置,则将正确调用这些函数。

我尝试启动一个计划的计时器,该计时器每秒触发一次,以检查文本文档代理,但是即使我在计时器刻度之间插入文本,其信息也不会改变。

但是,由于更改光标位置会导致调用这些函数,并且还会更新文档代理信息,因此我尝试在预定的计时器刻度中执行以下操作:

textDocumentProxy.adjustTextPosition(byCharacterOffset: 1)
textDocumentProxy.adjustTextPosition(byCharacterOffset: -1)

但这没有用,因为代理必须应用更改。但是,如果我切换值并调整位置1,-1、1等,则会正确调用函数并更新代理信息。

但是,这不是解决此问题的可接受方法。即使用户空闲,它也可以使自定义键盘不断更新。同样,调整文本位置最终将导致用户键入的文本以错误的位置结尾。

有没有人遇到这个问题并设法解决了这个问题而没有添加计时器?

0 个答案:

没有答案