根据用户选择更改NSMenuItem

时间:2011-01-17 09:04:22

标签: cocoa menuitem document-based

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

我想根据用户选择更改此菜单项的标题。如果用户没有选择任何内容,则应该读取“导出所有内容...”,当用户选择了一些内容时,应该读取“导出所选内容...”。当没有文档打开时,它应该只读“Export Things ...”

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

1 个答案:

答案 0 :(得分:5)

您可以在处理菜单项操作的响应程序类中实现-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;
}