【问题标题】:Cocoa Listen to Keyboard command+up EventCocoa 听键盘 command+up 事件
【发布时间】:2017-04-06 12:07:00
【问题描述】:

我正在开发一个 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;
    }
}

当我在视图中构建并按下 command+up 时,控制台什么也没有显示。但是当我按下command+B时,“command B”就被注销了。

那么为什么这不适用于 Command+up?我应该如何做到这一点?

【问题讨论】:

    标签: swift cocoa nsviewcontroller nsevent


    【解决方案1】:

    我找到了解决办法:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2011-07-25
      • 2018-04-15
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多