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
    }