【发布时间】:2011-12-11 20:29:07
【问题描述】:
我见过很多带有菜单栏项的应用程序或只有菜单栏界面的应用程序。
互联网上有一些教程和资料向您展示了如何做到这一点。但问题是,它们中只有可点击的索引行。
我希望在您单击菜单栏图标/项目时出现 NSPopover。有谁知道怎么做吗?
【问题讨论】:
我见过很多带有菜单栏项的应用程序或只有菜单栏界面的应用程序。
互联网上有一些教程和资料向您展示了如何做到这一点。但问题是,它们中只有可点击的索引行。
我希望在您单击菜单栏图标/项目时出现 NSPopover。有谁知道怎么做吗?
【问题讨论】:
我不知道是否可以使用标准状态栏项目来完成。使用菜单的自定义视图相对容易。
使用自定义视图创建状态栏项:
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];
}
您需要bit of NSWindow swizzling 才能让文本字段在弹出框内工作。
我已经准备了一个最小的 Xcode 项目,其中包含这些想法和一些胶水:PopoverMenulet。
【讨论】: