Изменение NSMenuItem в зависимости от выбора пользователя - PullRequest
0 голосов
/ 17 января 2011

Я работаю над приложением, основанным на документах Какао.У меня есть пункт меню в файловом меню с именем "Экспорт вещей ..." .Этот пункт меню подключается к первому респонденту и вызывает селектор в MyDocument .Пока все хорошо.

Я бы хотел изменить название этого пункта меню в зависимости от выбора пользователя.Если у пользователя ничего не выбрано, он должен читать «Экспортировать все вещи…» , когда у пользователя есть какие-то выбранные вещи, он должен читать «Экспорт выбранных вещей…» .Когда ни один документ не открыт, он должен просто прочитать "Экспорт вещей ..." .

Где и когда я должен изменить этот пункт меню?Я полагаю, что я могу просто изменить пункт меню, используя setTitle: , но как мне получить ссылку на NSMenuItem?

1 Ответ

5 голосов
/ 17 января 2011

Вы можете реализовать -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;
}
...