失去焦点时,NSPanel 不会隐藏

时间:2020-12-23 09:21:51

标签: swift nswindow nspanel

我正在尝试创建一个像 Spotlight 这样的窗口。 与在 Spotlight 中一样,单击背景时它应该隐藏。我尝试用 NSWindow 做但没有成功,但我相信使用 NSPanel 可以解决问题。 但是,即使使用 NSPanel 窗口也不会隐藏。 这是我正在使用的代码。

let panel = NSPanel(contentRect: CGRect(x: 0, y: 0, width: 200, height: 200), styleMask: [.titled, .nonactivatingPanel], backing: .buffered, defer: true)
panel.level = .mainMenu
panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
panel.orderFrontRegardless()

1 个答案:

答案 0 :(得分:1)

这是由于使用了窗口级别(.mainMenu高于所有窗口),因此您需要通过委托方法显式隐藏它

假设您在控制器中创建窗口/面板,使该控制器成为窗口的委托

panel.delegate = self

并实现类似的东西

extension ViewController { // << your controller class here
   func windowDidResignKey(_ notification: Notification) {
       if let panel = notification.object as? NSWindow {
          panel.close()
       }
   }
}