【发布时间】:2019-02-23 11:26:51
【问题描述】:
我想知道是否可以以编程方式将自定义命令添加到 Dock 图标选项(右键单击 Dock 图标时显示菜单)。
这可能吗?我怎么能做到这一点?我可以使用 Objective-C,我的目标是 MacOS Mojave
谢谢
【问题讨论】:
标签: objective-c macos cocoa right-click dock
我想知道是否可以以编程方式将自定义命令添加到 Dock 图标选项(右键单击 Dock 图标时显示菜单)。
这可能吗?我怎么能做到这一点?我可以使用 Objective-C,我的目标是 MacOS Mojave
谢谢
【问题讨论】:
标签: objective-c macos cocoa right-click dock
有多种方法,一种是在applicationDockMenu: 中分配NSMenu 在AppDelegate 中。
第二个选项是使用 xib 文件和Info.plist。这是 Xamarin 的教程,但在任何框架中都类似:https://docs.microsoft.com/en-us/xamarin/mac/user-interface/menu
【讨论】:
使用NSApplicationDelegat方法applicationDockMenu(_:):
optional func applicationDockMenu(_ sender: NSApplication) -> NSMenu?
允许委托为应用程序动态提供停靠菜单。
讨论
您还可以将 Interface Builder 中的菜单连接到 dockMenu 插座。应用程序指定停靠菜单的第三种方法是在 nib 中提供 NSMenu。
如果此方法返回一个菜单,则此菜单优先于 nib 中的 dockMenu。
每个菜单项的目标和操作都传递到停靠栏。选择菜单项后,停靠栏会向您的应用程序发送消息,该应用程序应调用 [NSApp sendAction:selector to:target from:nil]。
要在 nib 中指定 NSMenu,请使用键 AppleDockMenu 将 nib 名称添加到 info.plist。指定笔尖名称时不带扩展名。然后创建从文件的所有者对象(默认为 NSApplication)到菜单的连接。将菜单连接到 NSApplication 的 dockMenu 插座。该菜单位于其自己的 nib 文件中,因此可以在请求 dockMenu 时延迟加载,而不是在启动时加载。
【讨论】: