Mac系统状态栏焦点

时间:2012-10-01 08:09:38

标签: objective-c macos cocoa nsstatusitem nsstatusbar

我已经通过以下代码向我的systemStatusBar添加了一个菜单:

statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength] retain];

然后设置其属性。它与其他状态项(Volume,DateTime,Wi-Fi,BatteryIndi​​cator,...)的唯一不同之处在于,如果我选择它并按下键盘上的左或右方向按钮,我就无法导航到其他项目,就像明智一样如果我选择另一个状态项并按方向键,它将不会选择我的状态项,而是跳转到另一个statusItem。我想知道有没有办法解决这个问题或者它是非OS statusItems的标准吗?

1 个答案:

答案 0 :(得分:1)

您看到的菜单栏不是统一的对象。左侧部分的应用程序菜单项属于当前应用程序。所有这些MenuItem都是普通NSMenu对象的子代。

最右边的状态栏项目属于系统(Spotlight,Clock,TimeMachine等),并且还共享一个共同的父NSMenu或只是拥有一些特殊权限。

每个自定义状态栏菜单项都属于其对应的应用程序,并且具有自己的独立NSMenu父对象。 如您所知,每个状态菜单都插入到属于NSStatusItem对象的NSStatusBar中。两者都直接从NSObject继承而且(与NSMenu不同)缺少接口来确定状态菜单的父母或兄弟姐妹。每个状态栏项目绝对隔离。

因此,您可以使用NSMenu内的箭头键轻松导航,其中每个项目都知道其子项和父项。但是,无法从状态栏菜单导航到任何其他菜单。