【发布时间】:2012-12-17 00:51:42
【问题描述】:
我有一个从首选项窗口切换 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,那难道没有简单的解决方案吗?
也许你们中的一个人有一个想法?
提前感谢您的宝贵时间, 问候弗兰斯
【问题讨论】:
-
如果你把
setMenu:放在 awakeFromNib 中而不是其他任何东西,它会起作用吗? -
正确,当我将 enableStatusItem 更改为 awakeFromNib 时,代码有效(显示菜单)。但这样我就无法打开和关闭 statusItem
标签: objective-c macos cocoa