文本视图不应将不可调用的命令转发到响应者链上,文档说-[NSTextInputClient doCommandBySelector:]
:
如果无法调用
aSelector
,则doCommandBySelector:
不应将此消息传递到响应程序链上。NSResponder
也实现了此方法,并且它确实将不可调用的命令转发到响应程序链上,但文本视图不应。实现NSTextInputClient
协议的文本视图继承自NSView,
,而 继承自NSResponder
,因此此方法的实现将覆盖NSResponder
中的 。它不应该称为超级。
最后一句没有澄清,只是重新表述了如果我的文本理解没有让我失望的话,事情是如何设置的。
所以基本上只有一个处方:"文本视图不应该"。时期。
但是为什么?
例如,我可以理解这样一种情况:您希望文本视图不对任何/所有NSResponder
方法做出反应,而是将这些方法委托给其视图控制器。这会不会造成麻烦?这只是在 macOS 应用程序中保持文本视图行为一致的建议吗?
来自键输入消息序列:
如果第一个响应者是文本视图,则键事件将进入文本系统。密钥窗口向文本视图发送一条 keyDown: 消息,并将事件作为其参数。keyDown: 方法将事件传递给 handleEvent:,后者将字符输入发送到输入上下文以进行键绑定和解释。作为响应,输入上下文将 insertText:replacementRange:、setMarkedText:selectedRange:replacementRange: 或 doCommandBySelector: 发送到文本视图。
如果文本视图处理键事件,而滚动视图或其他视图接收doCommandBySelector:
消息,则不正确。不允许将doCommandBySelector:
发送给super
但可以将选择器发送给代理人。