繁体   English   中英

带情节提要的菜单栏-不会调用validateMenuItem

[英]Menubar with Storyboard - validateMenuItem not get called

我正在尝试使用情节提要设置菜单栏应用程序,但未调用我的validateMenuItem方法。

我会尽力解释我的所作所为。 首先,我在应用程序场景中拖动了一个菜单项。 然后是我的MenuController的一个对象。 创建一个MenuController(MenuController.swift)并用代码填充。 回到我的情节提要中,将菜单委托设置为MenuController,将MenuController出口设置为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
    }
}

故事板菜单代表 故事板菜单代表
(来源: picr.de

情节提要MenuController代表 情节提要MenuController代表
(来源: picr.de

有人知道吗?

来自奥地利的问候!

菜单/ UI验证机制不查询菜单的委托,而是使用项目的目标来确定启用状态。
如果未显式设置目标,则它将遍历响应者链。

要获得基本验证,您必须确保设置了以下内容:

  • 在界面生成器中选中了“自动启用项目”(默认情况下处于启用状态)
  • 您可以将菜单的动作控制拖动到第一响应者
  • 菜单的操作在作为响应者链的一部分的类中实现(例如,为您的UI管理一组操作的视图控制器)

validateUserInterfaceItem:基本实现对于带有一个名为test的动作选择器的项目来说可能类似于以下内容:

func validateUserInterfaceItem(anItem: NSValidatedUserInterfaceItem) -> Bool
{
    if anItem.action() == Selector("test:") {
        print("validating item \(anItem)")
        return true
    }
    return true
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM