【问题标题】:Menu Bar Popover Opens on Dock Icon Click OSX菜单栏弹出窗口在 Dock 图标上打开单击 OSX
【发布时间】:2017-05-20 11:49:36
【问题描述】:

我添加了一个打开弹出框的菜单栏图标。它工作正常,但是当我通过红十字关闭应用程序并尝试通过单击停靠图标再次打开应用程序时,它会打开应用程序窗口(应该如此)以及菜单栏弹出窗口(它不应该)。单击停靠图标时,如何仅打开应用程序窗口而不打开弹出窗口?单击停靠图标时处理打开的代码如下所示:

func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
    if !flag {
        for window: AnyObject in sender.windows {
            window.makeKeyAndOrderFront(self)
        }
    }
    return true
}

【问题讨论】:

    标签: swift macos


    【解决方案1】:

    我今天也遇到了这个问题。 我有相同的代码,所以我试图以某种方式检测window 是否弹出但失败了。 我还发现,如果您在启动后关闭主窗口然后单击停靠图标,如果您打印 sender.windows,它会显示 3 个项目(在我的情况下):<NSStatusBarWindow: 0x101300110>, <NSStatusBarWindow: 0x101108800>, <NSWindow: 0x6080001e0400>and 仅打开主窗口,没有弹出窗口,但如果弹出窗口打开过一次,则单击停靠图标(当主窗口关闭时)会导致显示主窗口和弹出窗口。 print(window)for 循环中现在显示 4 个项目 - 最后一个是 <_NSPopoverWindow: 0x1011284b0>
    我还打印了popover.isShown,它显示false,即使在通过单击停靠图标打开弹出框之后也是如此。我找不到检测和忽略此特定窗口的方法。

    所以我找到的唯一方法是替换

        for window: AnyObject in sender.windows {
            window.makeKeyAndOrderFront(self)
        }
    

    sender.windows[2].makeKeyAndOrderFront(self)
    

    因为每次主窗口出现在第三位
    希望有更好的方法,有人会教我们。

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2011-12-01
      • 2018-02-27
      相关资源
      最近更新 更多