如何处理退出键按下事件?

Sar*_*one 1 macos cocoa swift

在Swift中,Cocoa框架中是否有一个函数来处理按下操作,以便您可以注册哪个键盘按键被按下?

我想要获得逃生钥匙

更新:我刚刚发现噪音是由 super.keyDown(with: event) 引起的,这对于工作来说不是必需的,为什么你要添加该行?

Hex*_*ire 6

创建事件的子类NSWindow并实现keyDown事件:

import Cocoa
import Carbon.HIToolbox

class CustomWindow: NSWindow {

    override func keyDown(with event: NSEvent) {
        switch Int(event.keyCode) {
        case kVK_Escape:
            print("Esc pressed")
        default:
            break
        }
        super.keyDown(with: event)
    }

}
Run Code Online (Sandbox Code Playgroud)

这行:

import Carbon.HIToolbox
Run Code Online (Sandbox Code Playgroud)

允许您使用方便的键常量,例如kVK_Escape

在 Interface Builder 中将此类设置为主窗口类,然后就完成了:

在此输入图像描述

在此输入图像描述

PS 做同样的形式NSViewController,在viewDidLoaddo 中:

NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
    self.keyDown(with: $0)
    return $0
}
Run Code Online (Sandbox Code Playgroud)

PPS 要使“砰”声静音,请不要在按 Escape 键时调用 super - 将 super 调用移至默认值:

default:
    super.keyDown(with: event)
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您不希望按下 Escape 键时发出任何声音,则应使用以下方法:

创建一个NSView子类并将其设置为视图控制器的主视图:

import Cocoa
import Carbon.HIToolbox

class CustomView: NSView {
    override func performKeyEquivalent(with event: NSEvent) -> Bool {
        switch Int(event.keyCode) {
        case kVK_Escape:
            print("Esc pressed")
            return true
        default:
            return super.performKeyEquivalent(with: event)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)