菜单栏Popover在Dock图标上打开单击OSX

时间:2017-05-20 11:49:37

标签: swift macos

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

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

1 个答案:

答案 0 :(得分:0)

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

所以我找到的唯一方法就是取代

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

sender.windows[2].makeKeyAndOrderFront(self)

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