如何处理逃生按键事件?

时间:2017-11-23 06:05:11

标签: swift macos cocoa

在Swift中,Cocoa框架中是否有一个函数来处理印刷机,以便您可以注册哪个键盘键被击中?

我想获得转义键

更新: 我刚刚发现噪音已经消失了  super.keyDown(with:event) 这个东西不需要工作 为什么你加上那条线?

1 个答案:

答案 0 :(得分:1)

创建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)
    }

}

这一行:

import Carbon.HIToolbox

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

在Interface Builder中将此类设置为主窗口类,您可以全部设置:

enter image description here

enter image description here

P.S。要在NSViewController中执行相同的格式viewDidLoad

NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
    self.keyDown(with: $0)
    return $0
}

P.P.S。静音" bang"声音,请不要在Escape键按下时调用super - 将超级调用移至默认值:

default:
    super.keyDown(with: event)

修改

如果您在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)
        }
    }
}