2011-04-07 62 views
1

我使用cocoa在Mac上开发应用程序。我需要处理cmd +句点(。)键盘事件作为我设计的命令。但是现在,cmd +句点(。)键盘事件并没有像我预期的那样得到很好的处理。cmd +句点(。)不能按预期工作

在cocoa keyEvent句柄过程中,如果应用程序对象处理键事件,而事实证明它不是键等价键或键控接口控件事件,则它将其发送到sendEvent:消息中的键窗口。窗口对象调用第一响应者中的keyDown:方法。我的cmd +句柄(。)的句柄位于keyDown:方法

但问题是Mac处理cmd +句点(。)键与Escape键相同。关键窗口首先在视图层次结构中搜索其关键字相当于Escape或Command-。(无论输入哪个键)的视图。但是这些视图都不处理等价关键字,然后取消:将行动消息发送给响应者链中的第一响应者。 因此,在达到keyDown:方法之前,cmd +句点(。)将作为取消操作进行处理。

任何人都可以有一些想法来解决这个问题。并按照我的预期处理cmd +句点(。),但作为取消命令。谢谢。

更重要的是,最好不要处理cmd +句点(。)的时候执行键等效检查(performkeyEndivalent)。

+1

为了保持应用程序之间的一致性,您应该不使用Command +句点(。) - 用户期望它表示“停止”或“取消”。 – 2011-04-07 08:18:10

回答

1

如果您想重写默认处理,您需要在链中早期捕获键盘事件。例如,子类NSWindow和覆盖-sendEvent,或甚至更彻底的子类NSApplication并覆盖-nextEventMatchingMask(所有事件都将通过此函数)。