Я создал NSStatusItem
...
NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
... и хочу показать NSPopover
, когда на мой statusItem
нажали.
var popover = NSPopover()
Поэтому я написал следующую функцию ...
@objc func presentPopover() {
switch self.popover.isShown {
case true:
self.popover.performClose(self)
case false:
guard let button = self.statusBarItem.button else { return }
self.popover.show(relativeTo: button.bounds,
of: button,
preferredEdge: .minY)
}
}
... который отлично работает ✅
Проблемы начинаются при представлении NSPopover
- всплывающее окно не становится активным / отказывается от первого респондента, поэтому его содержимое отображается серым цветом, и пользователь должен щелкнуть в представлении, чтобы сделать его и его объекты активными. ❌
Безуспешно я пытался позвонить:
NSApplication.shared.activate(ignoringOtherApps: true)
В более старых решениях упоминается, что для получения NSPopover
пользовательского представления необходимо установить как statusItem.view
, но с macOS 10.14
view
устарело.
«представление» устарело в OS X 10.14: вместо этого используйте стандартное свойство кнопки
Вопрос:
Я ищу решение, в котором NSPopover
успешно реализован на NSStatusItem
с использованием Swift 4.2 (или выше) и где NSPopup
становится ключом / активным, как только появляется поповер отображается.