【问题标题】:How do I make a Menubar Application with a NSPopover?如何使用 NSPopover 制作菜单栏应用程序?
【发布时间】:2011-12-11 20:29:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: xcode menu popover


    【解决方案1】:

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

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

    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

    【讨论】:

    • 您,先生,是个圣人。感谢您的精彩回答。
    • 谢谢!非常好,所有答案都应该是这样的。
    • 使用此方法,我无法激活文本字段。它似乎是非活动的,就像带有文本字段的窗口不是活动窗口一样。有人知道在这种情况下如何激活文本字段吗?
    • 在这种情况下文本字段不活跃是一个已知的错误,请参阅stackoverflow.com/questions/7214273/nstextfield-on-nspopover/…
    • 这正是我想要的。谢谢。
    猜你喜欢
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多