objective-c – 在NSStatusItem上实现NSPopover

我目前有一个NSStatusItem用于在awakeFromNib中初始化的状态栏,如下所示:

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

我有一个NSMenu,当点击图标时会打开.单击时,其中一个选项应该是从状态栏图标打开NSPopover.为此,我有这个代码,它通过Interface Builder连接到菜单项:

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

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

但是,当我单击应该打开Popover的菜单项时,没有任何反应.有什么特别的原因可能出现这种情况吗?据我所知,应该可以做到.

提前致谢.我尽可能地查看了Stack Overflow,但是如果有一个真正重复的问题,请将我链接到它.

仅供参考:statusItem变量是NSStatusItem.

最佳答案 您需要使用[statusItem setView:]为[statusItem视图]自行设置视图以返回非零值.

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

点赞