2016-11-30 94 views
1

我开发了一个Mac OS应用程序。在同一个包中有一个主窗口应用程序和一个菜单栏助手应用程序。如何将另一个可可应用程序窗口置于前面

有一个名为“显示主应用程序”的助手应用程序的菜单项。如果在点击菜单项后未启动,助手应用程序应启动主应用程序。如果辅助应用隐藏在码头或主窗口关闭,应该将主应用带到前面。

我知道如何启动主应用程序。但我不知道如何实现重新激活功能。我使用下面的代码。

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

看来activate方法什么都不做,主应用刚刚启动并隐藏在dock中。我注意到,主应用程序实际上已被激活,因为主菜单栏已更改为主应用程序的主菜单。但是它的AppDelegate类的“applicationShouldHandleReopen”方法没有被调用。所以主窗口不能在前面订购。

我该如何让它工作?

回答

-1

无论目标应用程序启动与否,只需拨打

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

它的工作原理。

+0

为什么downvote并没有评论?任何人都可以在这里澄清?当我们降低了“应该”工作的效果时,并没有真正帮助社区。 –

+0

@ShaunWilson我同意 – morphinewan

+0

经过一些测试,如果应用程序已经运行,并且有一个窗口遮挡应用程序。我们的解决方案的一部分是将这种逻辑挂起,直到删除任何遮挡窗口之后。我们需要这样做,以便另一个应用程序可以将其自己的面板带到z命令的顶部(由于它的主窗口在顶部,并且'主动')。我们最终解决方案的一部分包括使用'activateIgnoringOtherApps '从[SO#2333078](http://stackoverflow.com/questions/2333078/how-to-launch-application-and-bring-it-to-front-using-cocoa-api?rq=1) –

相关问题