Cocoa监听键盘command+up事件

7

我正在开发一款macOS应用程序,希望在NSViewController中处理本地热键事件(command+上箭头键)。

以下是使用Swift实现的方法:

override func keyDown(with event: NSEvent) {

    let modifierkeys = event.modifierFlags.intersection(.deviceIndependentFlagsMask);
    let hasCommand = modifierkeys == .command;

    switch Int(event.keyCode) {
    case kVK_UpArrow where hasCommand:
        print("command up");
        break;
    case kVK_ANSI_B where hasCommand:
        print("command B");
        break;
    default:
        break;
    }
}

当我在视图中构建并按Command+上箭头时,控制台没有任何显示。但是当我按下 Command+B 时,“command B”被记录下来。
那么为什么 Command+上箭头不能正常工作?应该如何实现这一点?
1个回答

5
我找到了解决方案:
self.keyMonitor = NSEvent.addLocalMonitorForEvents(matching: NSEventMask.keyDown, handler: { (event) -> NSEvent? in

    if (event.modifierFlags.contains(.command)){
        if (Int(event.keyCode) == kVK_UpArrow){
            print("command up");
            return nil;
        }
    }

    return event;

});

关键是要中断keydown事件并通过返回nil来阻止其被分派。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接