我已经通过应用程序委托方法在我的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对象中找到方法。还有其他地方我应该看看吗?
答案 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: ""))
}
}