0

我将 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 的关闭操作。我应该怎么做?

4

1 回答 1

4

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

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

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

关于键盘处理,一个怪癖-[NSApplication sendEvent:]是,如果 Command 键按下,它就不会发送任何键向上事件。如果出于某种原因您确实需要查看按键事件,则必须实现自定义子类NSApplication,配置您的 Info.plist 以确保使用它,并实现-sendEvent:.

于 2013-09-16T05:15:30.610 回答