失去焦点时 NSPanel 不隐藏
NSPanel not hiding when focus is lost
我正在尝试创建一个类似于 Spotlight 的 window。
与在 Spotlight 中一样,它应该在单击背景时隐藏。我尝试使用 NSWindow 失败,但我相信使用 NSPanel 可以解决问题。
但是,即使在使用 NSPanel 时 window 也不会隐藏。
这是我正在使用的代码。
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()
由于使用了window级别(.mainMenu
高于windows),所以你需要通过委托方法显式隐藏它
因此假设您在控制器中创建了 window/panel,使该控制器成为 window
的委托
panel.delegate = self
并实现类似
的东西
extension ViewController { // << your controller class here
func windowDidResignKey(_ notification: Notification) {
if let panel = notification.object as? NSWindow {
panel.close()
}
}
}
我正在尝试创建一个类似于 Spotlight 的 window。 与在 Spotlight 中一样,它应该在单击背景时隐藏。我尝试使用 NSWindow 失败,但我相信使用 NSPanel 可以解决问题。 但是,即使在使用 NSPanel 时 window 也不会隐藏。 这是我正在使用的代码。
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()
由于使用了window级别(.mainMenu
高于windows),所以你需要通过委托方法显式隐藏它
因此假设您在控制器中创建了 window/panel,使该控制器成为 window
的委托panel.delegate = self
并实现类似
的东西extension ViewController { // << your controller class here
func windowDidResignKey(_ notification: Notification) {
if let panel = notification.object as? NSWindow {
panel.close()
}
}
}