使用外部屏幕时,StatusBar菜单不显示

问题描述

我正在使用以下代码在右键单击上显示状态栏菜单,并在左键单击上显示应用程序。

要实现此目的,我们需要在菜单(statusBarItem.menu = nil)关闭后将其分离。否则,我们将停止接收statusBarButtonDidClick事件,并且左键单击不起作用。

但是,当右键菜单被立即关闭后我附加了外部屏幕时。问题出在以下行中:statusBarItem.button?.performClick(nil),但如果没有该菜单,则不会立即出现。

我的猜测是performClick试图点击另一个屏幕,该屏幕关闭了活动屏幕上的菜单。

没有performClick,有没有办法解决它或实现相同的功能?

func createStatusBarItem() {
    statusBarItem = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.squareLength))

    if let button = statusBarItem.button {
        button.image = Asset.Icons.statusbar.image
        button.image?.size = CGSize(width: 16,height: 16)
        button.target = self
        button.action = #selector(statusBarButtonDidClick)
    }
    statusBarItem.button?.sendAction(on: [.leftMouseUp,.rightMouseUp])
}

func menuDidClose(_ menu: NSMenu) {
    statusBarItem.menu = nil
}

@objc private func statusBarButtonDidClick(sender: NSStatusBarButton) {
    let event = NSApp.currentEvent!

    if event.type == NSEvent.EventType.rightMouseUp {
        let statusBarMenu = StatusBarMenu()
        statusBarMenu.delegate = self

        statusBarItem.menu = statusBarMenu
        statusBarItem.button?.performClick(nil)
    } else {
        application.showApplication()
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)