【问题标题】:How to make a Finder-like Dock menu?如何制作类似 Finder 的 Dock 菜单?
【发布时间】:2011-06-13 12:40:07
【问题描述】:

当用户在正在运行的应用程序上用鼠标右键(或命令按钮 + 鼠标单击)单击 Dock 图标时 - 他可以看到 Dock 菜单。通常由 3 个部分组成:

此应用程序打开的所有文档的列表(红色)、自定义应用程序的菜单部分(黄色)和隐式添加到所有项目的默认项目(蓝色)。

Hereapple 解释说,我们可以通过实现应用程序委托的方法 ‑(NSMenu *)applicationDockMenu:(NSApplication *)sender 来定义这些自定义项(黄色),该方法应该返回一个有效的菜单(或通过在 Interface Builder 中定义这个 Dock 菜单)。

如果您尝试打开 Finder 的停靠菜单,您会看到一个不寻常的菜单:

这是不寻常的,因为它没有普通的退出项目和“选项”子菜单 - 就像任何其他启动的应用程序默认情况下一样。相反,它只有“隐藏”。

我很确定应用程序或 nib 文件可以覆盖 Dock 菜单的默认“系统”(蓝色)部分。也许有人知道如何实现这一目标?

我正在开发一个不应被允许退出或选择在“登录时”启动的安全应用程序,但它应该在用户登录时一直运行(就像 Finder 一样,它可能只使用强制应用程序退出或活动监视器)。我有充分的理由想要摆脱它。我知道这不完全是 Mac OS 的方式,但这不完全是一个普通的应用程序。 有没有人做过类似的事情?

谢谢

【问题讨论】:

    标签: cocoa


    【解决方案1】:

    非常简单:在 nib 文件中创建一个菜单,然后将 NSApplicationdockMenu 出口连接到该菜单。您可以找到更多信息here

    或者您可以通过代码将菜单项添加到现有菜单。您可以使用-[NSApplication applicationDockMenu:] 获取现有的停靠菜单并以编程方式添加项目。

    【讨论】:

    • mipadi,这些方法只允许添加/覆盖菜单中我标记为黄色的那部分。它不允许像 Finder 那样创建菜单 - 没有“退出”和“选项”项。
    • 如何将包含菜单的 xib 文件连接到 NSApplication?使用 xCode 6?
    • 您的“此处”链接已损坏
    【解决方案2】:

    Dock 菜单实际上是由 Dock 进程本身建立的,它只是代理每个应用程序的 dockMenus,因此您不能直接对其进行任何操作。

    可行的方法是:安装 Quartz Event Tap,拦截路由到 Dock 进程的点击,检查它是否在您自己的应用程序图标上,然后放置您自己的自定义菜单。很棘手,对于沙盒应用来说根本不可能。

    【讨论】:

      【解决方案3】:

      Finder 的菜单很特别,因为 Finder 本身很特别:它不能退出,必须始终保留在 Dock 中,必须在登录时打开,并且您不能在 Finder 中显示 Finder 的位置。

      您正在寻找的东西根本不存在。没有办法做到这一点。没有应用程序可以覆盖此区域。

      【讨论】:

        【解决方案4】:

        您可以将设置为YESLSUIElement 键添加到应用程序的Info.plist 文件中,而不是弄乱停靠菜单吗?这将完全阻止您的应用程序出现在 Dock 中。

        但是,它也会阻止它拥有菜单栏。

        【讨论】:

        • Rob,关键是在 Dock 中有一个图标(但具有自定义功能)。甚至 NSStatusItem 也是不可接受的——Dock 图标是我老板想要的,因为它“更大”——我之前想用状态栏图标将它作为代理来实现。我知道这听起来很奇怪 - 但应该可以将其作为 Finder(根据他的意见)。这就是为什么
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多