无法处理全屏 NSWindow 中的按键事件

Dom*_*alo 2 macos nswindow swift

在我的 OS X 应用程序中,我需要使用 Esc 键关闭全屏窗口。因此,我将我的实例设置NSWindowController为窗口的第一响应者(从控制器中的代码动态创建),keyDown用我的自定义实现覆盖该函数以关闭窗口。但不幸的是,当窗口设置级别为 时CGShieldingWindowLevel,不会调用keyDown函数keyUp(当然,在按 Esc 之前,我单击全屏窗口,因此窗口应该具有焦点)

我正在使用以下命令创建窗口:

    self.window = NSWindow(
        contentRect: screen.frame,
        styleMask: NSBorderlessWindowMask,
        backing: NSBackingStoreType.Buffered,
        defer: false,
        screen: screen
    )

    if let w = window {
        w.level = Int(CGShieldingWindowLevel())
        w.backgroundColor = NSColor.blackColor()
        w.makeKeyAndOrderFront(self)
        w.makeFirstResponder(self)

        self.webView = WKWebView(frame: w.frame, configuration: config)
        w.contentView = webView!
    }
Run Code Online (Sandbox Code Playgroud)

并使用以下方法处理密钥:

override func keyDown(theEvent: NSEvent) {
    if (theEvent.keyCode == 53) {
        self.window?.close()
    }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*ses 5

请参阅 的文档NSWindow.canBecomeKeyWindow。默认情况下,无边框窗口不能成为关键。你必须重写它(也许canBecomeMainWindow)才能返回 true。