没有标题栏就没有键盘捕获
No keyboard capture without title bar
我正在尝试使用 spriteKit 构建一个动画,它可以通过键盘控制(箭头键可以加速、减速、倒回动画)。
我还需要这个应用程序有一个完全透明的背景,这是我管理使用的:
scene?.backgroundColor = NSColor.clearColor()
以及:
self.window.opaque = false
到目前为止一切正常,我可以控制我的动画。但是,一旦我尝试通过取消选中右侧面板上 window 的框来删除 Interface Builder 中的标题栏,键盘捕获就会停止工作。
keyDown:
不再被调用,我得到 'dong' 当您的 mac 告诉您键盘输入不是一个选项时的声音特征。即使我的应用程序名称仍然在菜单栏上。
有没有办法在关闭标题时仍然能够接收键盘输入?
默认情况下 NSWindow
个实例 return false
来自 canBecomeKeyWindow
如果 window 没有标题栏。以下引用来自 NSWindow
class 参考文献中的相关部分。
Attempts to make the window the key window are abandoned if this method returns false. The NSWindow
implementation returns true if the window has a title bar or a resize bar, or false otherwise.
因此,要获得您想要的行为,您需要从 canBecomeKeyWindow
中继承 class NSWindow
和 return true
。
正如 Paul Pattersion(已接受的答案)所指出的那样,诀窍是将 NSWindow 子类化,以便 return canBecomeKeyWindow 为真。对于任何想知道如何做到这一点的人,这里是代码:
import Cocoa
class CustomWindow: NSWindow {
override var canBecomeKeyWindow: Bool {
get { return true }
}
}
我正在尝试使用 spriteKit 构建一个动画,它可以通过键盘控制(箭头键可以加速、减速、倒回动画)。
我还需要这个应用程序有一个完全透明的背景,这是我管理使用的:
scene?.backgroundColor = NSColor.clearColor()
以及:
self.window.opaque = false
到目前为止一切正常,我可以控制我的动画。但是,一旦我尝试通过取消选中右侧面板上 window 的框来删除 Interface Builder 中的标题栏,键盘捕获就会停止工作。
keyDown:
不再被调用,我得到 'dong' 当您的 mac 告诉您键盘输入不是一个选项时的声音特征。即使我的应用程序名称仍然在菜单栏上。
有没有办法在关闭标题时仍然能够接收键盘输入?
默认情况下 NSWindow
个实例 return false
来自 canBecomeKeyWindow
如果 window 没有标题栏。以下引用来自 NSWindow
class 参考文献中的相关部分。
Attempts to make the window the key window are abandoned if this method returns false. The
NSWindow
implementation returns true if the window has a title bar or a resize bar, or false otherwise.
因此,要获得您想要的行为,您需要从 canBecomeKeyWindow
中继承 class NSWindow
和 return true
。
正如 Paul Pattersion(已接受的答案)所指出的那样,诀窍是将 NSWindow 子类化,以便 return canBecomeKeyWindow 为真。对于任何想知道如何做到这一点的人,这里是代码:
import Cocoa
class CustomWindow: NSWindow {
override var canBecomeKeyWindow: Bool {
get { return true }
}
}