【问题标题】:Is it possible to add a NSStatusItem to a specific position in NSStatusBar?是否可以将 NSStatusItem 添加到 NSStatusBar 中的特定位置?
【发布时间】:2013-11-14 10:41:23
【问题描述】:
我使用self.statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 将 statusItem 添加到 OSX 上的 systemStatusBar。 statusItem 然后出现在 systemStatusBar 的最左侧位置。我想知道是否有办法将此类项目添加到特定索引,例如在系统时钟的左侧?
【问题讨论】:
标签:
objective-c
macos
position
nsstatusitem
nsstatusbar
【解决方案1】:
是和不是。使用私有 API,您可以指定 priority 以添加 NSStatusItem。我为NSStatusBar (NSStatusBar+MISSINGOrder) 开发了一个小类别,女巫为此提供了简单的方法:
NSStatusItem *statusItem =
[systemStatusBar statusItemWithLength:NSVariableStatusItemLength
positioned:NSStatusBarItemOrderingModeAfter
relativeTo:NSStatusBarItemPriorityNotificationCenter];
您可以在里面查找implementation details。
【解决方案2】:
有一个私有 API 可以做到这一点:
NSStatusItem *item = [NSStatusBar _statusItemWithLength:NSSquareStatusItemLength withPriority:INT32_MAX];
这会将状态项一直放在右侧(或者至少,在您允许拥有它们的最右侧。它仍然在聚光灯的左侧)。
显然,作为私有 API,您应该将其包装在 responseToSelector if 语句中。