在我的Cocoa App中从View Controller添加项目到Dock菜单

时间:2016-06-24 13:00:41

标签: swift macos cocoa

我已经通过应用程序委托方法在我的Mac应用程序中实现了一个停靠菜单:

func applicationDockMenu(sender: NSApplication) -> NSMenu? {
        let newMenu = NSMenu(title: "MyMenu")
        let newMenuItem = NSMenuItem(title: "Common Items", action: "selectDockMenuItem:", keyEquivalent: "")
        newMenuItem.tag = 1
        newMenu.addItem(newMenuItem)
        return newMenu

有没有办法可以在我的View Controller中向菜单添加项目 - 我似乎无法在我的NSApplication对象中找到方法。还有其他地方我应该看看吗?

1 个答案:

答案 0 :(得分:4)

由于applicationDockMenu:是委托方法,因此使用实例方法添加菜单项会与委托返回冲突。

您可以做的是使Dock菜单成为应用程序委托类中的属性/实例变量。这样,视图控制器可以通过将引用从应用程序委托传递给视图控制器(您将拥有dockMenu属性)或全局引用(不太推荐)来修改菜单。

class AppDelegate: NSObject, NSApplicationDelegate {
    @IBOutlet weak var window: NSWindow!
    var dockMenu = NSMenu(title: "MyMenu")

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        if let viewController = ViewController(nibName: "ViewController", bundle: nil) {
            viewController.dockMenu = self.dockMenu
            self.window.contentViewController = viewController
        }
    }

    func applicationDockMenu(sender: NSApplication) -> NSMenu? {
        return self.dockMenu
    }


class ViewController: NSViewController {
    var dockMenu: NSMenu?

    // Button action
    @IBAction func updateDockMenu(sender: AnyObject) {
        self.dockMenu?.addItem(NSMenuItem(title: "An Item", action: nil, keyEquivalent: ""))
    }
}