Mac - 如何以编程方式隐藏NSApplicationActivationPolicyAccessory或LSUIElement应用程序?

3
我正在编写一款基于Swift的Cocoa小应用程序,与Spotlight/QuickSilver/Alfred类似,是一个单窗口应用程序。它被设置为NSApplicationActivationPolicyAccessory (文档)(尽管我也尝试了使用等效的LSUIElement)。它通过全局热键激活。
除了在其处于活动状态时无法使用NSRunningApplication.currentApplication().hide()隐藏应用程序之外,一切正常。 hide方法的文档表示,“如果应用程序已经退出或者属于无法隐藏的类型,则此值的属性将为NO”(重点强调),而我得到了一个NO回复(尽管我实际上使用的是Swift,所以我得到的是false)。
我可以理解为什么NSApplicationActivationPolicyProhibited应用程序无法隐藏,因为它从未处于活动状态,但对于NSApplicationActivationPolicyAccessory来说,这种情况让我感到困惑。
我尝试了myWindow.orderOut(self);,但这只是隐藏了窗口而没有隐藏我的应用程序并将焦点返回到以前的应用程序。
我确实存储了对先前活动应用程序的引用,因此如果需要,我可以手动再次激活该应用程序,但我希望有一种更简洁的方法来解决这个问题。

你尝试过 NSApplication.sharedApplication().hide(nil) 吗?通常情况下,我们会操作应用程序对象(NSApplication 的实例)而不是 NSRunningApplication 的实例来操作当前应用程序。 - Ken Thomases
@KenThomases 搞定了!谢谢!你能把这个写成一个答案,这样我就可以把它标记为正确的了吗? - Matt
2个回答

6

使用 NSApplication.sharedApplication().hide(nil)。通常,我们会引用应用程序对象(NSApplication 的实例),而不是一个 NSRunningApplication 实例来操作当前应用程序。


2
Swift 4:NSApplication.shared.hide(nil) - Repose

0

手动解决方案是存储对先前活动的NSRunningApplication实例的引用(以下称为previouslyActiveApplication),然后在您想要停用NSApplicationActivationPolicyAccessory应用程序时激活它,如下所示:

previouslyActiveApplication!.activateWithOptions(NSApplicationActivationOptions.ActivateIgnoringOtherApps);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接