Как настроить пользовательское подменю «Открыть последние» в macOS - PullRequest
0 голосов
/ 11 апреля 2019

Что-то очень странное происходит с меню «Открыть последние», которое создается с новыми проектами «документ».

Несмотря на то, что в Интерфейсном Разработчике оно выглядит, как и любое другое меню, оно имеет некоторыепохоже, скрытое специальное поведение.

Я пытался создать свой собственный список элементов в этом меню, установив его делегат в мой AppDelegate, а затем реализовал там обработчик menuWillOpen.Однако, это никогда не вызывается.Делая то же самое с недавно добавленным подменю, даже если оно выглядит одинаково в IB, оно работает.

На самом деле это уже не вопрос.Первоначально я написал это как вопрос, не понимая, почему я не смог обновить это меню, но теперь кажется, что мне просто нужно удалить стандартное и добавить свое собственное вместо изменения автоматически созданного.

1 Ответ

0 голосов
/ 11 апреля 2019

На случай, если кто-то столкнется с этой странной проблемой, вот как заставить ее работать:

  1. Создайте новое подменю «Открыть недавние», подобное тому, которое было добавлено по умолчанию, а затемудалить оригинал.Другим способом может быть непосредственное редактирование файла раскадровки и удаление атрибута systemMenu из меню по умолчанию, как показано ниже: <menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="...">
  2. Если вы запустите приложение сейчас, вы увидите два меню, потому что NSDocumentController создает один автоматически.Чтобы предотвратить это, создайте пользовательский подкласс NSDocumentController и внедрите в него следующий код:
- (NSUInteger)maximumRecentDocumentCount    {
    return 0;
}

Чтобы зарегистрировать свой пользовательский контроллер, вызовите его [CustomDocumentController sharedDocumentController]; один раз в методе init вашего AppDelegate.

Назначьте делегата вновь созданного подменю в AppDelegate иреализовать этот метод в AppDelegate:

- (void)menuWillOpen:(NSMenu *)menu {
    // Add your menu items here
}
...