2012-12-27 47 views
4

我现在有针对在awakeFromNib这样初始化的状态栏的NSStatusItem实施NSPopover上NSStatusItem

statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
    [statusItem setMenu:statusMenu]; 
    [statusItem setImage:statusImage]; 
    [statusItem setAlternateImage:statusHighlightedImage]; 
    [statusItem setHighlightMode:YES]; 
    [statusItem setTarget:self]; 

我有一个NSMenu点击图标时打开。其中一个选项被点击后,应该从状态栏图标打开NSPopover。要做到这一点,我有这样的代码,它通过接口生成器连接到菜单项:

- (IBAction)prefs:(id)sender {  
    NSRectEdge prefEdge = NSMaxYEdge; 

    [[self pop] showRelativeToRect:[[statusItem view] bounds] 
          ofView:[statusItem view] 
        preferredEdge:prefEdge]; 
} 

然而,当我单击要打开酥料饼的菜单项,没有任何反应。有什么特别的原因可能会导致这种情况?据我所知,应该可以做到。

在此先感谢。我通过堆栈溢出来查看最好的,但如果有一个真正重复的问题,请把我连接到它。

供参考:该statusItem变量是NSStatusItem

+0

您应该添加的代码为'NSMenu' – NSAddict

+0

那是'-prefs:'方法获取调用? '[self pop]'和'[statusItem view]'是否为非零? – paulmelnikow

+0

@noa是对的,尝试记录一些内容,并检查'self.pop'是否返回'nil'。 – NSAddict

回答

2

您需要自己设置一个视图,使用[statusItem setView:][statusItem view]返回非nil

如果您不介意使用私有API,则可以尝试拨打[statusItem _button],但是如果您计划提交给App Store,则不允许这样做。

+0

我试着用_button来查看它是否可以工作,但它没有。除非我犯了一个简单的错误,否则设置视图似乎不起作用。它只是覆盖状态项的当前视图(所以它从菜单栏中消失)。 – Josh

+0

是的,就是这样。 – Wevah

+0

嗯。不知道为什么这不起作用,即使我创建一个新的视图。 – Josh