【问题标题】:How to bring another cocoa application window to front如何将另一个可可应用程序窗口置于前面
【发布时间】:2016-11-30 12:55:14
【问题描述】:

我开发了一个 Mac OS 应用程序。同一个包中有一个主窗口应用程序和一个菜单栏帮助程序应用程序。

帮助应用程序有一个菜单项,称为“显示主应用程序”。如果在我单击菜单项后没有启动辅助应用程序,则它应该启动主应用程序。如果辅助应用程序隐藏在停靠栏或主窗口关闭,则辅助应用程序应将主应用程序置于最前面。

我知道如何启动主应用程序。但我不知道如何实现反应功能。我使用了如下代码。

let apps = NSRunningApplication.runningApplications(withBundleIdentifier: "com.xxx.yyy")
if let mainApp = apps.first {
       mainApp.activate(options: [ .activateIgnoringOtherApps ])
}

当主应用程序刚刚启动并隐藏在 Dock 中时,activate 方法似乎没有任何作用。我注意到主应用程序实际上已激活,因为主菜单栏已更改为主应用程序的主菜单。但是没有调用其AppDelegate类的“applicationShouldHandleReopen”方法。所以主窗口不能排在前面。

我怎样才能让它工作?

【问题讨论】:

  • 你做到了吗?我正在尝试激活 Dock 中的应用程序窗口。

标签: swift macos cocoa appdelegate


【解决方案1】:

无论目标应用程序是否启动,只需调用

NSWorkspace.shared().launchApplication("xxxx")

有效。

【讨论】:

  • 为什么投反对票而没有评论?还有其他人可以在这里澄清吗?当我们对“应该”有效的东西投反对票时,并没有真正帮助社区..
  • @ShaunWilson 我同意
  • 经过一些测试后,如果应用程序已经在运行并且有一个窗口遮挡了应用程序,那么这并没有将目标应用程序带到前面。我们解决方案的一部分是在移除任何遮挡窗口之前挂起此逻辑。我们需要这个,以便另一个应用程序可以将自己的面板带到 z 顺序的顶部(由于它的主窗口位于顶部,并且也是“活动的”。)我们最终解决方案的一部分包括使用 @987654323 @来自SO#2333078
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2013-05-15
  • 2011-07-14
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
相关资源
最近更新 更多