swift - 如何在 Swift 3 Cocoa 应用程序中检测命令 + 箭头键

标签 swift cocoa keydown

override func keyDown(with event: NSEvent) {
    switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
    case [.command] where event.characters == "9":
        print("command-9")
    case [.command] where event.keyCode == 123:
        print("command-left arrow") // problem: this never executed
    default:
        break
    }
}

以上是我尝试过的。 command-9 的作用就像一个魅力。但是命令-箭头不起作用。

看起来,如果你按命令-箭头,修饰符标志不是命令。我在互联网上搜索但无法使其工作。

最佳答案

您可以将代码分为两步,检查是否先单击了 command,然后检查 keyCodeswitch:

if event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.command) {
    switch event.keyCode {
    case 123:
        print("command-left arrow")
    case 124:
        print("command-right arrow")
    case 125:
        print("command-down arrow")
    case 126:
        print("command-up arrow")
    default:
        break
    }
}

当单击命令 - 向左箭头时,将会打印出来。

更新
要仅限于命令+箭头键,请使用此if语句:

if event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.command) &&
    !event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.option) &&
    !event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.control) &&
    !event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.function) &&
    !event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.shift) &&
    !event.modifierFlags.intersection(.deviceIndependentFlagsMask).contains(.capsLock) {

}

关于swift - 如何在 Swift 3 Cocoa 应用程序中检测命令 + 箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44340447/

相关文章:

swift - 重新加载常规 View Controller (快速)

cocoa - 在 mousedown 方法中创建 NSRect 值的数组

C#:使用不同的键同时移动两个矩形

ios - 两个 UIStackView 的约束 - 一个在另一个下面

swift - healthStore.requestAuthorization() 导致 Apple Watch 应用程序崩溃

objective-c - WebView选择变化的通知

jquery - 将 e.which 插入数组不等于给定数组

javascript - 传单:如何启用长按? (鼠标按下多次触发按钮)

swift - 如何在RealityKit中录制视频?

cocoa - 嵌入 YouTube 视频在 Mavericks 中不再起作用