objective-c - 在 Objective-C 中使用 NSMenu 切换 NSStatusItem

标签 objective-c macos cocoa

我有一个应用程序,可以从首选项窗口切换 NSStatusItem。首选项窗口有一个复选框“启用/禁用”,它调用 NSStatusItem 类中的“enabledStatusItem”和“disableStatusItem”方法。

这一切都工作正常,我的问题是向此 NSStatusItem 添加一个菜单。 NSStatusItem 类中的代码如下所示:

-(void)enableStatusItem
{
    //get icon
    theIcon = [NSImage imageNamed:@"test.png"];

    //create item
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [statusItem setImage:theIcon];
    [statusItem setHighlightMode:YES];
    [statusItem setMenu:statusMenu];
}

-(void)disableStatusItem
{
    [[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
}

除了 setMenu 之外,一切正常。起初我在awakeFromNib中加载了StatusItem,然后setMenu起作用了。但是当首选项复选框处于“关闭”状态时,StatusItem 必须保持关闭状态,因此我无法再将其加载到 awakeFromNib 中。

我怀疑 setMenu 没有加载,因为它不在 awakeFromNib 中,但是在 awakeFromNib 之后调用“enableStatusItem”,因此在 awakeFromNib 中还没有要添加菜单的 statusItem。而且我无法“预加载”statusItem,因为它是使用“[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];”创建的

到目前为止,我已经尝试了很多,甚至制作了一个测试应用程序,其中我逐一添加了每一段代码,这样我就可以将其分解。但到目前为止还没有取得任何成功。

我觉得因为这么简单的事情,就一个小小的NSMenu,那有没有一个简单的解决方案呢?

也许你们中有一个人有想法?

预先感谢您的宝贵时间, 问候弗兰斯

最佳答案

该代码没问题,但存在菜单未保留的问题

assert(statusMenu);

关于objective-c - 在 Objective-C 中使用 NSMenu 切换 NSStatusItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13901387/

相关文章:

iPhone全局变量

ios - 我想保存应用程序,这样当用户退出时,用户返回时 uitextfields 不会删除为文本

macos - udp 上的 ffmpeg 原始视频

objective-c - 如何判断远程网络设备是否可用?

macos - Cocoa 文本系统中的幻像字符

objective-c - 使用 OpenAL 在 iOS 上进行离线录音

ios - supportedInterfaceOrientations 在除 6+ 以外的所有 iPhone 上调用

ios - 使用 iPhone 将 mac 检测为 iBeacon

objective-c - 使用 NSRunAlertPanel 时的 EXC_BAD_INSTRUCTION

objective-c - NSProgressIndicator 未显示进度