如何在Swift 3可可应用中检测command + arrow键

9vw9lbht  于 2023-05-16  发布在  Swift
关注(0)|答案(4)|浏览(126)
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 - arrow,修饰符标志就不是command了。我在互联网上搜索,但无法让它工作。

k4aesqcs

k4aesqcs1#

您可以将代码分为两步,并检查是否先单击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-statement

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) {

}
rslzwgfq

rslzwgfq2#

Swift 5解决方案- * 以下代码也适用于Mac Catalyst*

override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
    guard let key = presses.first?.key else { return }
    if key.modifierFlags.contains(.command) {
        switch key.keyCode {
        case .keyboardUpArrow:
            print("command + up arrow")
        case .keyboardDownArrow:
            print("command + down arrow")
        case .keyboardLeftArrow:
            print("command + left arrow")
        case .keyboardRightArrow:
            print("command + right arrow")
        default:
            break
        }
    }
}
lyr7nygr

lyr7nygr3#

如果只关心是否为键盘事件按下了Command键,而不考虑任何其他修饰符,则可以使用以下命令

if event.modifierFlags.contains(.command) {
    ...
    }

[from用Xcode 13.3编写的Swift MacOS应用程序]

xtfmy6hx

xtfmy6hx4#

我已经找到了一个替代解决方案,它根本不需要代码!.
因为我正在编写一个可可应用程序,所以为操作添加菜单项是常见的做法。
当创建菜单项时,我可以简单地设置它的“关键字等效项”。

相关问题