无法处理来自全屏 NSWindow 的关键事件
Can't handle key events from fullscreen NSWindow
在我的 OS X 应用程序中,我需要使用 Esc 键关闭全屏 window。所以我将 NSWindowController
的实例设置为 window 的第一响应者(从控制器中的代码动态创建),用我的自定义实现覆盖 keyDown
函数以关闭 window.但不幸的是,当 window 将级别设置为 CGShieldingWindowLevel
时,不会调用 keyDown
和 keyUp
函数(当然,在我按 Esc 之前,我单击全屏 window 所以 window 应该有焦点)
我正在创建 window:
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!
}
并使用以下方式处理密钥:
override func keyDown(theEvent: NSEvent) {
if (theEvent.keyCode == 53) {
self.window?.close()
}
}
请参阅 NSWindow.canBecomeKeyWindow
的文档。默认情况下,无边框 window 不能成为键。您必须将其(可能 canBecomeMainWindow
)覆盖为 return true。
在我的 OS X 应用程序中,我需要使用 Esc 键关闭全屏 window。所以我将 NSWindowController
的实例设置为 window 的第一响应者(从控制器中的代码动态创建),用我的自定义实现覆盖 keyDown
函数以关闭 window.但不幸的是,当 window 将级别设置为 CGShieldingWindowLevel
时,不会调用 keyDown
和 keyUp
函数(当然,在我按 Esc 之前,我单击全屏 window 所以 window 应该有焦点)
我正在创建 window:
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!
}
并使用以下方式处理密钥:
override func keyDown(theEvent: NSEvent) {
if (theEvent.keyCode == 53) {
self.window?.close()
}
}
请参阅 NSWindow.canBecomeKeyWindow
的文档。默认情况下,无边框 window 不能成为键。您必须将其(可能 canBecomeMainWindow
)覆盖为 return true。