macOS программно показывает строку системного меню - PullRequest
1 голос
/ 09 февраля 2020

Я работаю над приложением панели меню, которое открывает всплывающее окно. Я хотел бы отобразить всплывающее окно при запуске приложения. Это прекрасно работает, если приложение переднего плана не находится в полноэкранном режиме.

Но, если приложение переднего плана находится в полноэкранном режиме, всплывающее окно просто плавает в середине экрана (очевидно, так как строка меню не видна ). В идеале, я бы хотел, чтобы при запуске приложения автоматически отображалась строка меню.

В качестве альтернативы есть способ, по крайней мере, определить, является ли приложение на переднем плане полноэкранным, поэтому я могу отключить открытие всплывающего окна в тот случай?

Вот текущий код:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
    let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
    var popover = NSPopover()

    @objc func togglePopover(sender: AnyObject?) {
        if popover.isShown {
            closePopover(sender: sender)
        } else {
            showPopover(sender: sender)
        }
    }

    func showPopover(sender: AnyObject?) {
        if let button = statusItem.button {
            popover.show(relativeTo: button.bounds, of: button, preferredEdge: NSRectEdge.minY)
        }
    }

    func closePopover(sender: AnyObject?) {
        popover.performClose(sender)
    }

    func applicationDidFinishLaunching(_ notification: Notification) {
        statusItem.button?.image = NSImage(named: "MenuIcon")
        statusItem.button?.action = #selector(AppDelegate.togglePopover(sender:))
        popover.contentViewController = PopoverViewController(nibName: "PopoverView", bundle: nil)
        showPopover(sender: nil)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...