Я пытаюсь создать окно, подобное 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()
Это связано с используемым уровнем окна (.mainMenu
, который выше всех окон), поэтому вам нужно явно скрыть его с помощью методов делегата.
поэтому, предполагая, что вы создаете окно/панель в своем контроллере, сделайте этот контроллер делегатом окна
panel.delegate = self
и реализовать что-то вроде
extension ViewController { // << your controller class here
func windowDidResignKey(_ notification: Notification) {
if let panel = notification.object as? NSWindow {
panel.close()
}
}
}