【问题标题】:How to create a customized dock menu for my macOS application in the dock using Xcode如何使用 Xcode 在 Dock 中为我的 macOS 应用程序创建自定义 Dock 菜单
【发布时间】:2020-04-24 00:07:34
【问题描述】:

我正在尝试在 Dock 中为我的 swift 应用程序创建一个自定义的 Dock 菜单,这样当用户在我的应用程序启动后右键单击 Dock 磁贴时,它会显示我的自定义项以及默认项停靠菜单项。我更喜欢以编程方式或使用 Xcode 创建(静态)菜单项。

我查看了此处 (How can I add a menu to the application in the dock?) 和 (Adding Items to the Dock Menu from my View Controller in my Cocoa App) 发布的类似问题,但两者都提到了旧的 nib 界面,而不是如何使用情节提要创建一个。我还查看了故事板中的文件模板库,但找不到停靠菜单的模板(我只看到一个用于主菜单的模板)。

任何有关如何使用情节提要或以编程方式使用 swift 实现此目的的指针将不胜感激。

编辑 2020 年 4 月 24 日:由于肯的回应,我决定以编程方式自定义停靠菜单。这是我在 AppDelegate 中实现applicationDockMenu(_:) 的方法

EDIT #2 4/24/2020:修复了方法中缺少的 _ 输入参数并解决了问题。

func applicationDockMenu(_ sender: NSApplication) -> NSMenu? {
        let myMenu = NSMenu(title: "MyMenu")
        let myMenuItem = NSMenuItem(title: "My Item 1", action: nil, keyEquivalent: "")
        myMenu.addItem(myMenuItem)
        return myMenu
    }

我一定错过了其他东西,因为在启动应用程序后我右键单击应用程序的停靠图标没有显示新项目。

有什么想法吗?

谢谢。

肯尼

【问题讨论】:

  • 您能否确认您的applicationDockMenu(_:) 实现正在被调用?是否调用了同一类上的其他应用程序委托方法?
  • 我可以确认该方法从未被调用,因为我在方法顶部添加了打印语句。在 Xcode 中以调试模式运行应用程序并右键单击停靠图标,打印语句从未显示,断点也从未激活。我认为单击停靠图标时应该自动运行此方法?另一方面,applicationDidFinishLaunchingapplicationWillTerminateapplication 等其他应用程序委托方法正在按预期调用。
  • 问题已解决。我忘记了方法调用中的 _ 参数。代码 sn-p 已更新。感谢您的帮助!

标签: swift xcode macos dock nsdocktile


【解决方案1】:

您可以在您的应用委托类中实现方法applicationDockMenu(_:) 以返回要添加到Dock 菜单的项目菜单。

如果您查看该方法的文档,它还讨论了提供静态 Dock 菜单的其他方法。其中之一涉及创建单独的 NIB。如果没有菜单 NIB 的模板,您可以简单地创建一个空的并添加一个菜单对象。该 NIB 由 Info.plist 文件中的键引用,不需要涉及您的情节提要。

【讨论】:

  • 我想我一定不明白如何正确地做到这一点。我决定采用编程方式创建一个而不使用单独的 NIB 的方法。但我定制的码头项目没有出现。请在上面的原始帖子中查看我的编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2013-03-01
  • 2011-10-31
  • 2022-10-05
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
相关资源
最近更新 更多