在Swift中,Cocoa框架中是否有一个函数来处理按下操作,以便您可以注册哪个键盘按键被按下?
我想要获得逃生钥匙
更新:我刚刚发现噪音是由 super.keyDown(with: event) 引起的,这对于工作来说不是必需的,为什么你要添加该行?
创建事件的子类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)