objective-c - Mac系统状态栏焦点

标签 objective-c macos cocoa nsstatusitem nsstatusbar

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

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

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

最佳答案

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

最右侧的状态栏项目属于系统(Spotlight、Clock、TimeMachine 等),它们也共享一个公共(public)父级 NSMenu 或仅具有一些特殊权限。

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

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

关于objective-c - Mac系统状态栏焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12669557/

相关文章:

macos - Mac系统上检测框架使用情况?

swift - Cocoa NSTextField 值未更改

objective-c - 为什么 NSTimeIntervalSince1970 定义为固定 double ?

iphone - iOS中 View 层次结构中的 subview 管理

objective-c - 为什么将任何选择器发送到 Nil 对象什么都不做,但将 "invalid"选择器发送到任何 NSObject 会引发异常?

ios - 跳过单例对象的初始化?

objective-c - 如何以编程方式从 OSX 上的任何文档生成 PDF?

macos - 从命令行在 MacOS 上启动 neo4j(社区版)

macos - applicationDidBecomeActive 在 OSX 应用程序中不会触发

objective-c - 为什么 NSTextView 不能用于弱引用?