【问题标题】:Changing NSMenuItem depending on user selection根据用户选择更改 NSMenuItem
【发布时间】:2011-01-17 09:04:22
【问题描述】:

我正在开发一个基于 Cocoa 文档的应用程序。我在文件菜单中有一个名为“Export Things...” 的菜单项。此菜单项连接到第一响应者,并调用 MyDocument 中的选择器。到目前为止一切顺利。

我想根据用户选择更改此菜单项的标题。如果用户没有选择任何东西,它应该是“Export All Things...”,当用户选择了一些东西时,它应该是“Export Selected Things...”。当没有文档打开时,它应该只是读取"Export Things..."

我应该在何时何地更改此菜单项?我想我可以使用 setTitle: 更改菜单项,但是如何获得对 NSMenuItem 的引用?

【问题讨论】:

    标签: cocoa menuitem document-based


    【解决方案1】:

    您可以在处理菜单项操作的响应程序类中实现-validateMenuItem:。它应该返回一个 BOOL(指示该项目是否已启用),但您还可以获得对 NSMenuItem 的引用作为可用于更改标题的参数。

    要决定您正在处理哪个菜单项,您应该检查它的action,例如

    - (BOOL)validateMenuItem:(NSMenuItem *)item {
      if ([item action] == @selector(export:)) {
        if (hasSelection) {
          [item setTitle:NSLocalizedString(@"Export Selected Things",nil)];
        } else {
          [item setTitle:NSLocalizedString(@"Export All Things",nil)];
        }
      }
      return YES;
    }
    

    【讨论】:

    • 完美运行,非常感谢!唯一的小问题是关闭文档时菜单项不会重置为默认标题。但我想这是可以接受的,因为它无论如何都是灰色的。
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 2020-05-12
    • 2016-10-04
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    相关资源
    最近更新 更多