Программное добавление меню «Открыть недавние» в контекстное контекстное меню - PullRequest
4 голосов
/ 24 августа 2011

У меня есть недокументированное приложение Какао со значком меню и меню состояния.Я добавил меню «Открыть последние» в меню состояния в Интерфейсном Разработчике.Заполнение меню работает просто отлично:

[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:
            [NSURL fileURLWithPath:filename]]

Теперь я также хотел бы добавить второе меню «Открыть последние» в контекстное всплывающее меню.Как бы я создал меню программно, чтобы оно автоматически заполнялось записями, как для версии в меню состояния?

Я попытался создать копию меню в меню состояния, но оно не получилосьнаселен.Я предполагаю, что NSDocumentController не знает о меню (честно говоря, я не знаю, как он знает об этом в меню состояния).

1 Ответ

2 голосов
/ 12 октября 2013

Для справки, лучшая документация по внутренней работе меню Open Recent , которую я нашел, такова: http://lapcatsoftware.com/blog/2007/07/10/working-without-a-nib-part-5-open-recent-menu/

К сожалению, это не очень помогает в этом, потому что даже если вы создадите такое меню, оно будет игнорироваться NSDocumentController. Меню должно существовать в главном меню до вызова applicationDidFinishLaunching:, иначе оно не будет выбрано - и, следовательно, дублирующиеся тоже игнорируются.

То, что я закончил, и то, что пока работает, это:

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

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

...