如何在OS X中捕获Command + W键操作?

时间:2013-09-16 03:50:21

标签: xcode macos key nswindow

我将NSWindows子类化并实施了 keyDown: keyUp:方法,如下所示:

- (void)keyDown:(NSEvent*)event
{
    NSLog(@"Down: '%@'", [event characters]);
    [super keyDown:event];
}

- (void)keyUp:(NSEvent*)event
{
    NSLog(@"Up: '%@'", [event characters]);
    [super keyUp:event];
}

如果我按下“W”键,它会正确打印我的“向下”和“向上”。但如果我按下Command + W组合,它只会打印“向下”消息,并且不会触发Windows的关闭动作。我该怎么办?

1 个答案:

答案 0 :(得分:4)

Command-W通常是菜单项的等效键。它被告知-performKeyEquivalent:时由菜单处理。菜单项将其操作方法发送到其目标。动作方法通常为-performClose:,目标通常是第一响应者。

因此,Command-W的正常处理根本不使用窗口的-keyDown:-keyUp:

如果要控制窗口是否关闭,请使用窗口委托实现-windowShouldClose:。如果您希望在窗口即将关闭时收到通知,请在窗口委托中实施-windowWillClose:或观察NSWindowWillCloseNotification通知。

关于键盘处理,-[NSApplication sendEvent:]的怪癖是,如果Command键关闭,它就不会调度任何键启动事件。如果由于某种原因你确实需要查看key up事件,你必须实现NSApplication的自定义子类,配置你的Info.plist以确保它被使用,并实现覆盖{{1} }。