20

我见过很多带有菜单栏项的应用程序或只有菜单栏界面的应用程序。

互联网上有一些教程和资料向您展示了如何做到这一点。但问题是,它们中只有可点击的索引行。

当您单击菜单栏图标/项目时,我希望出现 NSPopover。有谁知道怎么做这个吗?

4

1 回答 1

58

我不知道是否可以使用标准状态栏项目来完成。使用菜单的自定义视图相对容易。

使用自定义视图创建状态栏项:

item = [[NSStatusBar systemStatusBar] statusItemWithLength:thickness];
view = [[CustomView alloc] initWithFrame:(NSRect){.size={thickness, thickness}}];
[item setView:view];        

您的自定义视图需要检测鼠标点击:

- (void)mouseDown:(NSEvent *)event {
   ...
}

最后,在检测到鼠标点击后的某个时刻,显示/隐藏弹出框。

if (/* menulet is active */) {
    [popover showRelativeToRect:/* menulet view frame */
                         ofView:/* menulet view */
                  preferredEdge:NSMinYEdge];
} else {
    [popover performClose:nil];
}

你需要一些 NSWindow swizzling来让文本字段在弹出框内工作。

我已经用这些想法和一些胶水准备了一个最小的Xcode 项目: PopoverMenulet

于 2011-10-26T16:49:44.183 回答