【问题标题】:NSBorderlessWindowMask Subview NSTextfield not keybard editable SwiftNSBorderlessWindowMask 子视图 NSTextfield 不是键盘可编辑的 Swift
【发布时间】:2015-03-05 16:13:15
【问题描述】:

我在 Swift 项目(没有情节提要)的主窗口中使用 NSBorderlessWindowMask,当我加载子视图时,NSTextfield 插座不可通过键盘编辑。我已经把这段代码放在了初始化上:

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

这允许插座像焦点一样变成“蓝色”,但是键盘编辑被禁用,我可以在文本字段上复制/粘贴

【问题讨论】:

    标签: xcode swift nswindow nstextfield keywindow


    【解决方案1】:

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

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

    另外,永远不要调用becomeKeyWindow()(除非在覆盖中调用super)。 Cocoa 调用它来通知窗口它已成为关键窗口。它并不指示窗口成为关键窗口。

    【讨论】:

      【解决方案2】:

      我为这个问题找到了一个很棒的解决方法: 基本上在开始时将 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
          }
      

      【讨论】:

      • becomeKeyWindow 的文档说“永远不要直接调用这个方法”。
      猜你喜欢
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多