为什么 -[NSTextInputClient doCommandBySelector:] 不应该将事件传递到响应程序链



文本视图不应将不可调用的命令转发到响应者链上,文档说-[NSTextInputClient doCommandBySelector:]

如果无法调用aSelector,则doCommandBySelector:不应将此消息传递到响应程序链上。NSResponder也实现了此方法,并且它确实将不可调用的命令转发到响应程序链上,但文本视图不应。实现NSTextInputClient协议的文本视图继承自NSView,,而 继承自NSResponder,因此此方法的实现将覆盖NSResponder中的 。它不应该称为超级。

最后一句没有澄清,只是重新表述了如果我的文本理解没有让我失望的话,事情是如何设置的。

所以基本上只有一个处方:"文本视图不应该"。时期。

但是为什么?

例如,我可以理解这样一种情况:您希望文本视图不对任何/所有NSResponder方法做出反应,而是将这些方法委托给其视图控制器。这会不会造成麻烦?这只是在 macOS 应用程序中保持文本视图行为一致的建议吗?

来自键输入消息序列:

如果第一个响应者是文本视图,则键事件将进入文本系统。密钥窗口向文本视图发送一条 keyDown: 消息,并将事件作为其参数。keyDown: 方法将事件传递给 handleEvent:,后者将字符输入发送到输入上下文以进行键绑定和解释。作为响应,输入上下文将 insertText:replacementRange:、setMarkedText:selectedRange:replacementRange: 或 doCommandBySelector: 发送到文本视图。

如果文本视图处理键事件,而滚动视图或其他视图接收doCommandBySelector:消息,则不正确。不允许将doCommandBySelector:发送给super但可以将选择器发送给代理人。

最新更新