Mac 系统状态栏焦点

3

我通过以下代码将菜单添加到了我的系统状态栏:

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

然后设置其属性。它与其他状态项(音量、日期时间、Wi-Fi、电池指示器等)唯一不同的是,如果我选择它并按键盘上的左或右方向键,我不能导航到其他项目,同样地,如果我选择另一个状态项并按方向键,则不会选择我的状态项,而是跳转到另一个状态项。我想知道是否有一种方法来解决这个问题,还是非操作系统状态项的标准就是这样?


我状态栏上的第三方应用程序都不允许这样做,所以我猜箭头键(以及其他功能,如命令拖动)只允许由苹果默认状态栏应用程序使用。 - TheAmateurProgrammer
1个回答

1
你所看到的菜单栏并不是一个统一的对象。左侧的应用程序菜单项属于当前应用程序。所有这些菜单项都是共同的NSMenu对象的子级。
最右侧的状态栏项目属于系统(Spotlight、时钟、TimeMachine等),它们要么也共享一个共同的父级NSMenu,要么具有一些特殊的权限。
每个自定义状态栏菜单项都属于其相应的应用程序,并具有自己独立的NSMenu父对象。正如你所知道的那样,每个状态菜单都被插入到一个NSStatusItem中,该NSStatusItem属于NSStatusBar对象。两者直接继承自NSObject,并且(与NSMenu不同)缺乏确定状态菜单的父级或兄弟的接口。每个状态栏项目都是完全隔离的。
因此,你可以轻松地使用箭头键在NSMenu中导航,其中每个项目都知道其子级和父级。然而,无法从你的状态栏菜单导航到任何其他菜单。

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