【问题标题】:Mac System Status Bar FocusMac 系统状态栏焦点
【发布时间】:2012-10-01 08:09:37
【问题描述】:

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

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

然后设置它的属性。它与其他状态项(音量、日期时间、Wi-Fi、BatteryIndi​​cator 等)的唯一不同是,如果我选择它并按下键盘上的左或右方向按钮,我将无法导航到其他项目,同样明智如果我选择另一个状态项并按方向键,它将不会选择我的状态项,而是跳转到另一个状态项。我想知道有没有办法解决这个问题,还是非操作系统状态项的标准?

【问题讨论】:

  • 我的状态栏上的第 3 方应用程序都不允许这样做,所以我猜箭头键(以及其他功能,如命令拖动)仅在 Apple 默认状态下允许酒吧应用程序。

标签: objective-c macos cocoa nsstatusitem nsstatusbar


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多