Изменение nsmenuitem в зависимости от выбора пользователя

StackOverflow https://stackoverflow.com/questions/4711468

  •  11-10-2019
  •  | 
  •  

Вопрос

Я работаю над приложением на основе какао. У меня есть пункт меню в меню «Файл» с названием "Экспорт вещей ...". Анкет Этот пункт меню подключен к первому ответчику и вызывает селектор в MyDocument. Анкет Все идет нормально.

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

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

Это было полезно?

Решение

Вы можете реализовать -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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top