从我的Cocoa App中的View Controller将项目添加到Dock菜单 [英] Adding Items to the Dock Menu from my View Controller in my Cocoa App

查看:44
本文介绍了从我的Cocoa App中的View Controller将项目添加到Dock菜单的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have implemented a dock menu in my Mac app via the Application delegate method:

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对象中找不到方法.我应该去别的地方看看吗?

Is there a way I can add items to the menu from within my View Controller - I can't seem to find a method in my NSApplication object. Is there another place I should look?

推荐答案

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

Since applicationDockMenu: is a delegate method, having an instance method add menu items would conflict with the delegate return.

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

What you could do is make the dock menu a property/instance variable in your application delegate class. This way, your view controller could modify the menu either by passing the reference to the menu from your application delegate to your view controller (which you would have a dockMenu property) or referencing it globally (less recommended).

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: ""))
    }
}

这篇关于从我的Cocoa App中的View Controller将项目添加到Dock菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆