Удалить функции, связанные с вкладками, из меню "Окно"?

Я настраиваю меню в своем приложении Mac Catalyst. Я добавил два элемента, как вы можете видеть на следующем снимке экрана ("Установить размер окна" и "Открыть отдельную программу просмотра документов"). Но я хочу избавиться от элементов меню по умолчанию, которые появляются между этими двумя элементами (четыре функции, связанные с вкладками).

В buildMenuWithBuilder, Я могу удалить некоторые элементы (дочерние меню) следующим образом:

       [builder removeMenuForIdentifier:UIMenuMinimizeAndZoom];

Но не существует определенного идентификатора для дочернего меню, содержащего функции вкладок. Что еще более важно, его еще не существует, когда buildMenuWithBuilderбежит. Если я помещу этот код в конец этого метода...

       UIMenu *test = [builder menuForIdentifier:UIMenuWindow];
NSArray *test2 = [test children];

... тогда test2 содержит только два меню по умолчанию, UIMenuMinimizeAndZoom и UIMenuBringAllToFront, плюс мои собственные меню. Так что, даже если бы у меня был его идентификатор, я подозреваю, что его удаление здесь ни к чему не приведет.

Что еще более странно, оно появляется между двумя моими настраиваемыми меню, хотя я добавляю их одно за другим с помощью insertChildMenu:atStartOfMenuForIdentifier:.

Наконец, я заметил, что когда я открываю вторую сцену (в новом окне Mac), эти параметры вкладки исчезают из меню "Окно" и больше не возвращаются. Кажется, что macOS изначально решает, что эти функции могут иметь отношение к моему приложению, но затем, когда я открываю сцену, она решает, что они не актуальны, и удаляет их. Поэтому мне интересно, есть ли способ с самого начала указать macOS не включать эти пункты меню?

Я думал, это может быть связано с NSWindow свойство tabbingMode, но установив в моем главном окне NSWindowTabbingModeDisallowedбез разницы. Мой единственный опыт разработки для Mac - это Mac Catalyst, поэтому я не знаю, что еще попробовать.

1 ответ

Решение

Думаю, если полностью отключить вкладки, они исчезнут. Это немного похоже на взлом, потому что вам нужно вызвать код AppKit, но инженер Apple дал мне его:

Класс _nswindow = NSClassFromString(@"NSWindow"); [_nswindow setAllowsAutomaticWindowTabbing: НЕТ];

Другие вопросы по тегам