我添加了一个打开弹出框的菜单栏图标。它工作正常,但是当我通过红叉关闭应用程序并尝试再次打开应用程序时,单击停靠栏图标,它会打开应用程序窗口(应该),但菜单栏弹出窗口(它不应该)。当我点击停靠栏图标时,如何才能打开应用程序窗口而不是弹出窗口?单击停靠图标时处理打开的代码如下所示:
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag {
for window: AnyObject in sender.windows {
window.makeKeyAndOrderFront(self)
}
}
return true
}
答案 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)
因为每次主窗口出现在第三位时 希望有更好的方式,有人会教我们。