【问题标题】:NSMenuItem not being enabled?NSMenuItem 未启用?
【发布时间】:2011-07-04 16:47:58
【问题描述】:

我有一个名为 history 的 NSMenuItem,它位于一个名为 menu 的 NSMenu 中。当我的程序启动时,历史没有子菜单,因此它被禁用。然后在某个时候,我需要一个历史子菜单,所以我创建它,使它成为历史子菜单。历史旁边出现一个箭头,告诉我子菜单在那里。但是历史仍然被禁用。我试过 setEnabled 但不起作用。请帮忙。这是我的代码:

这是我创建菜单的时候,你可以在菜单中看到一个 NSMenuItem 的历史记录。

    menu = [[NSMenu alloc] initWithTitle:@"Menu"];
[[menu addItemWithTitle:@"History" action:nil keyEquivalent:@""] setTarget:self];
[[menu addItemWithTitle:@"Settings" action:@selector(loadSettings:) keyEquivalent:@""] setTarget:self];
[[menu addItemWithTitle:@"Quit" action:@selector(terminateApp:) keyEquivalent:@""] setTarget:self];

此时,历史记录被禁用(灰显)。 然后在程序的某个地方我需要有一个历史子菜单:

        if (historyMenu == nil) {
        historyMenu = [[NSMenu alloc] initWithTitle:@"Lyrics history"];
        [menu setSubmenu:historyMenu forItem:[menu itemWithTitle:@"History"]];
    }

我现在在历史旁边看到一个箭头,但它仍然是灰色的。

请帮忙,过去 2 小时我一直在尝试解决这个问题。谢谢。

【问题讨论】:

    标签: objective-c cocoa xcode nsmenuitem


    【解决方案1】:

    您正在设置目标,但有一个 nil 操作。尽量不要设定目标。这可能会一直启用它,在这种情况下,您可能必须手动启用或禁用菜单项。

    Here is the documentation 了解如何启用菜单项。

    【讨论】:

    • 谢谢,但是如果我不设置操作方法怎么办?事实上,我什至不需要设定一个目标,我不知道我为什么会有它。不管怎样,我会试试你说的,谢谢你的帮助。
    【解决方案2】:

    我不得不将validateMenuItem 方法重写为return true

    override func validateMenuItem(menuItem: NSMenuItem) -> Bool {
        return true
    }
    

    在我将 target 设置为 self 之前它实际上并没有使用验证方法,尽管就像你对

    所做的那样
    menu.addItemWithTitle("An Item", action: #selector(itemPressed), keyEquivalent: "")?.target = self
    

    【讨论】:

      【解决方案3】:

      macOS 将根据 enabled 状态是否被处理自动处理。因此,如果您要设置action,您还需要设置操作的目标。

      let menu = NSMenu()
      let itemPress = menu.addItem(withTitle: "some name..", action: #selector(press), keyEquivalent: "")
      itemPress.target = self
      

      和标签:

      @objc func press() {
          print("pressed...")
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-30
        • 2012-03-11
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        相关资源
        最近更新 更多