Как включить автоматическую генерацию элементов меню окна (например, окно плитки слева / справа от экрана и открыть файл с галочкой) в панели меню macOS

#macos #cocoa #appkit #nsmenu #nsmenuitem

#macos #cocoa #appkit #nsmenu #nsmenuitem

Вопрос:

В настоящее время я создаю панель меню macOS для приложения без использования какого-либо конструктора интерфейса (без файлов XIB / NIB), просто чистый код. Однако я ожидал, что некоторые элементы будут автоматически сгенерированы при запуске приложения. Существовали такие пункты, как «Начать диктовку», «Эмодзи и символы» в меню редактирования, а также пункт меню «Войти в полноэкранный режим» в меню Просмотра. Но когда дело доходит до меню окна, ничего не было сгенерировано автоматически, только пункты меню, которые я установил в коде. Должен ли я включать некоторые флаги или параметры при создании экземпляра окна NSMenu , чтобы оно автоматически генерировало эти элементы? Я новичок в разработке macOS, поэтому чувствую, что я немного потерялся. Заранее спасибо.

Комментарии:

1. Обратите внимание, что меню Window и Help немного отличаются тем, что у них есть свои собственные свойства NSApplication, поэтому обязательно установите их в свои меню, иначе система не будет знать, как обращаться с ними по-другому.

2. @red_menace, ты имеешь в виду это? ( developer.apple.com/documentation/appkit/nsapplication /… ). Хорошо, позвольте мне попробовать. Спасибо!

3. Да, это тот самый. Если вы просто создадите меню окна и добавите его в главное, все, что вы получите, это то, что вы предоставили. Если вы создадите меню окна, а также установите его в качестве windowsMenu NSApp, в дополнение вы получите все преимущества windowy, которые предоставляет ОС.

4. @red_menace, так здорово, что это работает, спасибо, чувак! Вот что я сделал: 1. Создайте обычное окно NSMenu (так же, как я делал раньше) 2. Пометьте окно NSMenu как windowsMenu NSApp [NSApp setWindowsMenu: window]; // assuming "window" is properly instantiated 3. Заполните окно NSMenu элементами NSMenuItems и так далее…

5. @red_menace Пожалуйста, добавьте свой комментарий в качестве ответа. У меня был тот же вопрос, и ответ определенно не очевиден, хотя это просто ссылка на правильную документацию.

Ответ №1:

Меню Window и Help немного отличаются тем, что у них есть свои собственные свойства NSApplication, поэтому вам нужно будет установить их в свои меню, чтобы система знала, что это такое.

Например, если вы просто создадите меню окна и добавите его в главное, все, что вы получите, это предоставленные вами элементы. Если вы также установите его в качестве windowsMenu приложения, дополнительно вы получите все необходимое для перемещения, поддержки вкладок и т. Д.

Настройка helpMenu NSApp аналогична, где в меню добавляется пункт меню Spotlight.