NSBorderlessWindowMask子视图NSTextfield不是keybard可编辑的Swift

时间:2015-03-05 16:13:15

标签: xcode swift nswindow nstextfield keywindow

我在Swift项目中使用NSBorderlessWindowMask作为我的主窗口(没有故事板),当我加载Subview时,NSTextfield出口不是keybard可编辑的。我已经把这段代码放在初始化上了:

self.window?.makeKeyWindow()
self.window?.becomeKeyWindow()

这允许插座是"蓝色"喜欢焦点,但键盘编辑被禁用,我可以复制/粘贴文本字段

2 个答案:

答案 0 :(得分:1)

您需要使用NSWindow的自定义子类并覆盖canBecomeKeyWindow()才能返回true。默认情况下,对于没有标题栏的窗口,它返回false(如文档所述)。

您可能希望对canBecomeMainWindow()执行相同操作。

此外,请勿拨打becomeKeyWindow()(除非在覆盖中拨打super)。 Cocoa调用它来通知窗口它已成为关键窗口。它不会指示窗口成为关键窗口。

答案 1 :(得分:1)

我发现了这个问题的一个很棒的解决方法: 基本上设置在开始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
    }