我使用 cocoa 在Mac上开发应用程序。我需要处理 cmd +句点(。)键盘事件作为我设计的命令。但是现在cmd +句点(。)键盘事件没有按照我的预期处理得好。
在cocoa keyEvent句柄过程中,如果应用程序对象处理一个键事件并且它不是一个等效键或一个键接口控件事件,它会将它发送到一个sendEvent:消息中的键窗口。 window对象调用第一个响应者中的keyDown:方法。 cmd +句点(。)的句柄位于 keyDown:方法中。
但问题是Mac会像退出键一样处理cmd +句点(。)键。关键窗口首先在视图层次结构中搜索其等效键为Escape或Command-的视图,无论输入哪个。但是这些视图都没有处理等效的密钥,然后取消:动作消息被发送到响应者链中的第一个响应者。 所以cmd +句点(。)在到达keyDown:方法之前作为取消操作处理。
任何人都可以有一些想法来解决这个问题。并使cmd +句点(。)按照我的预期处理,但作为取消命令。谢谢。
更重要的是,在进行密钥等效检查( performkeyEquivalent )时,最好不要处理cmd +句点(。)。
答案 0 :(得分:1)
如果要覆盖默认处理,则需要先捕获链中的键盘事件。例如,子类NSWindow和override -sendEvent,甚至更彻底,子类NSApplication和override -nextEventMatchingMask(所有事件都将通过此函数)。