Cocoa听键盘命令+ up事件

时间:2017-04-06 12:07:01

标签: swift cocoa nsviewcontroller nsevent

我正在开发一个macOS应用程序,我想在NSViewController中处理本地热键事件(命令+向上箭头键)。

以下是我如何使用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;
    }
}

当我在视图中构建并按下命令+向上时,控制台什么都不显示。但是当我按下命令+ B时,"命令B"已退出。

那么为什么这不适用于Command +?我该怎么做到这一点?

1 个答案:

答案 0 :(得分:4)

我找到了解决方案:

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来调度它