如何使用NSPopover制作菜单栏应用程序?

Jac*_*cob 20 xcode menu popover

我看过许多带有菜单栏项目的应用程序或只有菜单栏界面的应用程序.

互联网上有一些教程和内容告诉你如何实现这一目标.但问题是,那些只有可点击的索引行.

单击菜单栏图标/项目时,我希望显示NSPopover.有谁知道如何做到这一点?

djr*_*ero 58

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

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

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

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

- (void)mouseDown:(NSEvent *)event {
   ...
}
Run Code Online (Sandbox Code Playgroud)

最后,在检测到鼠标单击后的某个时刻,显示/隐藏弹出窗口.

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

你需要一些NSWindow调配才能让文本字段在popover中运行.

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