NSBorderlessWindowMask 子视图 NSTextfield 不可通过键盘编辑 Swift
NSBorderlessWindowMask Subview NSTextfield not keybard editable Swift
我在 Swift 项目(没有情节提要)上为我的主要 window 使用 NSBorderlessWindowMask,当我加载子视图时,NSTextfield 出口不是键盘可编辑的。我已经把这段代码放在初始化中了:
self.window?.makeKeyWindow()
self.window?.becomeKeyWindow()
这允许插座 "blue" 像焦点一样,但键盘编辑被禁用,我可以 copy/paste 在文本字段上
您需要使用 NSWindow
的自定义子类并将 canBecomeKeyWindow()
重写为 return true。默认情况下,对于 windows 没有标题栏(如文档所述),它 return 为 false。
您可能想对 canBecomeMainWindow()
执行相同的操作。
此外,永远不要调用 becomeKeyWindow()
(除非在覆盖中调用 super
)。由 Cocoa 调用以通知 window 它已成为密钥 window。它不会指示 window 成为密钥 window。
我找到了解决此问题的绝妙解决方法:
基本上在开始时将 NSWindow 掩码设置为 NSTitledWindowMask,当加载应用程序时,删除设置新掩码 NSBorderlessWindowMask
func applicationWillFinishLaunching(notification: NSNotification) {
self.window?.titleVisibility = NSWindowTitleVisibility.Hidden
self.window?.styleMask = NSTitledWindowMask // adds title bar
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
self.window?.makeKeyWindow()
self.window?.becomeKeyWindow()
self.window.setIsVisible(true)
self.window?.styleMask = NSBorderlessWindowMask // removes title bar
}
我在 Swift 项目(没有情节提要)上为我的主要 window 使用 NSBorderlessWindowMask,当我加载子视图时,NSTextfield 出口不是键盘可编辑的。我已经把这段代码放在初始化中了:
self.window?.makeKeyWindow() self.window?.becomeKeyWindow()
这允许插座 "blue" 像焦点一样,但键盘编辑被禁用,我可以 copy/paste 在文本字段上
您需要使用 NSWindow
的自定义子类并将 canBecomeKeyWindow()
重写为 return true。默认情况下,对于 windows 没有标题栏(如文档所述),它 return 为 false。
您可能想对 canBecomeMainWindow()
执行相同的操作。
此外,永远不要调用 becomeKeyWindow()
(除非在覆盖中调用 super
)。由 Cocoa 调用以通知 window 它已成为密钥 window。它不会指示 window 成为密钥 window。
我找到了解决此问题的绝妙解决方法: 基本上在开始时将 NSWindow 掩码设置为 NSTitledWindowMask,当加载应用程序时,删除设置新掩码 NSBorderlessWindowMask
func applicationWillFinishLaunching(notification: NSNotification) {
self.window?.titleVisibility = NSWindowTitleVisibility.Hidden
self.window?.styleMask = NSTitledWindowMask // adds title bar
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
self.window?.makeKeyWindow()
self.window?.becomeKeyWindow()
self.window.setIsVisible(true)
self.window?.styleMask = NSBorderlessWindowMask // removes title bar
}