Использование NSPopover на NSStatusItem (Swift 4.2) - PullRequest
0 голосов
/ 04 января 2019

Я создал 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 становится ключом / активным, как только появляется поповер отображается.

...