我尝试使用故事板设置菜单栏应用程序,但我的validateMenuItem
方法未被调用。
我会尝试解释我的所作所为。 首先,我在应用场景中拖动了一个菜单项。然后我的MenuController有一个Object。创建了一个MenuController(MenuController.swift)并用代码填充它。回到我的故事板中,我将Menu委托设置为MenuController,将MenuController Outlet设置为Menu。 (我不完全确定我是否正确设置了代表。)
当我启动应用程序时,会出现菜单图标,并且第一个项目标题设置为test。但是,当我点击图标时,不会调用validateMenuItem
方法。
MenuController.swift
import Cocoa
class MenuController: NSObject {
var statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)
@IBOutlet weak var statusMenu: NSMenu!
@IBOutlet weak var item1: NSMenuItem!
override func awakeFromNib() {
print("awakeFromNib")
self.item1.title = "Test"
let icon = NSImage(named: "menubarIcon")
statusItem.image = icon
statusItem.menu = statusMenu
}
override func validateMenuItem(menuItem: NSMenuItem) -> Bool {
print("validateMenuItem")
return true
}
}
故事板菜单代表 Storyboard Menu Delegates http://up.picr.de/23648472pu.jpg
Storyboard MenuController委托 Storyboard MenuController Delegates http://up.picr.de/23648473df.jpg
有人有想法吗?
来自奥地利的问候!
答案 0 :(得分:4)
菜单/ UI验证机制不会查询菜单的委托,而是使用项目的目标来确定启用状态。
如果没有明确设置目标,它会遍历响应者链。
要获得基本验证,您必须确保设置以下内容:
对于带有名为test的操作选择器的项目,validateUserInterfaceItem:
的基本实现可能如下所示:
func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool
{
if anItem.action() == Selector("test:") {
print("validating item \(anItem)")
return true
}
return true
}