0

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

如果aSelector无法调用,则doCommandBySelector:不应将此消息向上传递到响应者链。NSResponder也实现了这个方法,它确实将不可调用的命令向上转发到响应者链,但文本视图不应该。NSTextInputClient实现协议的文本视图继承自NSView,which 继承自NSResponder,因此您对此方法的实现将覆盖NSResponder. 它不应该调用超级。

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

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

但为什么?

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

4

1 回答 1

1

键输入消息序列

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

如果文本视图处理键事件并且滚动视图或其他视图接收到doCommandBySelector:消息,那将是不正确的。您不能发送doCommandBySelector:到,super但您可以将选择器发送给委托人。

于 2018-01-22T17:27:17.317 回答