objective-c - 检查 NSStatusItem 当前是否显示在 OS X NSStatusBar 主菜单栏中

标签 objective-c macos cocoa menubar nsstatusitem

我的应用程序在 OS X 菜单栏中放置了一个 NSStatusItem。在某些时候,我想从系统 NSStatusBar 中删除菜单栏图标。 (此时我仍想保留 NSStatusItem,并向其发送消息......只是不显示它。)

我使用此方法从 statusBar 中删除 statusItem:

[[NSStatusBar systemStatusBar] removeStatusItem:statusItem];

我想在稍后的某个时刻检查 statusItem 当前是否显示在 statusBar 中。我不想通过 bool 值等来跟踪这一点。

我认为这项检查会起作用:

if ([[NSStatusBar systemStatusBar] isEqualTo:[statusItem statusBar]])
{
    NSLog(@"statusItem's bar == system bar, before");
}

NSLog(@"removing from systemStatusBar");
[[NSStatusBar systemStatusBar] removeStatusItem:statusItem];

if ([[NSStatusBar systemStatusBar] isEqualTo:[statusItem statusBar]])
{
    NSLog(@"statusItem's bar == system bar, after removal");
}

输出:

statusItem's bar == system bar, before removal

removing from systemStatusBar

statusItem's bar == system bar, after removal

所以 statusItem 的 statusBar 没有明显的变化。

NSStatusBar class reference似乎不包含任何适用的方法。

有没有办法检查某个 NSStatusItem 是否在主系统栏中?

最佳答案

我找到了私有(private)属性_statusItems
这是我写的一个小类别,我不确定它是否有效,但你可以尝试一下。

<小时/>

状态栏类别

@implementation NSStatusBar (statusItemCheck)
- (NSArray *)items {
    return [self valueForKey:@"_statusItems"];
}
- (BOOL)statusItemIsShown:(NSStatusItem *)statusItem {
    if ([self items]) {
        NSInteger index = [[self items] indexOfObject:statusItem];
        if (index != -1) return YES;
    }

    return NO;
}
@end
<小时/>

编辑

您应该考虑添加 BOOL 标志,而不是访问私有(private)方法。
我的类别只是一个示例,如果您想将您的应用上传到 MAS,您通常不应该使用私有(private)方法。

关于objective-c - 检查 NSStatusItem 当前是否显示在 OS X NSStatusBar 主菜单栏中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14104975/

相关文章:

objective-c - 如何提高我的 iOS 代码的 XML 解析性能?

ios - How to solve ""_OBJC_CLASS_$_FIRApp”,引用自“with Firebase in Xcode

objective-c - cocoa 中的下拉 View

ios - 如何在同一级别的实例方法调用的实例方法中访问实例变量

cocoa - OSX cocoa : How to check which window is in focus?

ios - 如何在 iOS 中点击缩放和双击缩小?

objective-c - 从 Cocoa 应用程序获取 Finder 窗口的当前目录

macos - Drush 无法在 MAMP 上连接到 MySQL?

objective-c - 如何将CGPath保存为svg或pdf?

cocoa - 有什么理由使用 NSViewAnimation 而不是 CoreAnimation 技术?