如何查看NSTextInputClient中输入法的状态?

How to check the status of input method in NSTextInputClient?

From the docs,我可以看到输入上下文会向文本视图发送以下方法之一。

在我的测试用例中,当启用输入法时,keyDown可以触发setMarkedText:selectedRange:replacementRange,但是如果我一直删除markedText直到最后一个字符,那么输入法将被停用不触发上述任何方法。

是否有类似停用挂钩的东西,以便我可以在停用输入法后立即执行某些操作?

我从 Chromium 中找到了解决方案。

启用输入法后,用户不断键入或删除,插入符下方显示 IME window。 NSTextInputClient 将发送按键事件,输入上下文将调用 setMarkText.

问题是,当用户删除 markedText 的最后一个字符时,IME window 消失,键事件被发送并且输入上下文 不会调用 setMarkText。结果,markedText 也不会被清除(如我所料,它应该是一个空字符串)。

Chromium 的解决方案非常直接。只需在每次 keyDown 时清除 markedText,让 setMarkText 完成工作。如果 markedText 为空,表示输入上下文已停用输入法且未调用 setMarkText.

嗯,我认为 API 有点不一致...