显示无窗口(LSUIElement)应用程序的首选项

时间:2011-02-20 16:22:52

标签: objective-c cocoa macos user-interface

我正在制作一个位于状态栏中的应用程序(靠近时钟,电源指示灯和其他图标)。然而,为了让用户更改首选项,我需要打开一个完整的窗口。

但是,由于应用程序为LSUIElement,因此它不会显示在 alt + 标签上。这意味着当用户点击其他窗口时,pref窗口将被移动到后面并且没有简单的方法可以回到它。 (您可以逐个折叠窗口或使用 F9 ,但这一切都有点痛苦。)
所以我们在背景中有一个无用的悬空窗口和迷茫的用户(“我的窗口在哪里?”)。

有没有更好的方法来解决这个问题?许多类似的实用程序(例如thisthis)都有相同的问题,而且他们的作者在OSX开发中可能不是像我一样的绿色角色。

如果有人感兴趣,有问题的申请是stackapps

谢谢

3 个答案:

答案 0 :(得分:3)

标准方法是

(1)编写一个小助手首选项应用程序并通过NSUserDefaults addSuiteNamed将其首选项词典添加到您的无窗口应用程序: - 这样您的主应用程序将通过NSUserDefaults API透明地访问帮助程序中设置的首选项;

(2)使用分布式通知向您的无窗口应用通知偏好更改。

答案 1 :(得分:1)

您可以将其转换为Newt.PrefPane。然后可以通过“系统偏好设置”窗口访问它。除此之外 - 我认为Newt是一款非常棒的应用程序,以这种方式处理ui元素应用程序的偏好非常普遍。

答案 2 :(得分:1)

由于您的用户无论如何都不会在该首选项窗格上花费大量时间,因此优先级窗格始终保持在前面不是一个好主意吗? 这就是Dropbox使用的大型应用程序。