从“窗口”菜单中删除与选项卡相关的功能?

问题描述

我正在自定义Mac Catalyst应用程序中的菜单。正如下面的屏幕截图所示,我添加了两个项目(“设置窗口大小”和“打开单独的文档查看器”)。但是我想摆脱这两个项目之间的默认菜单项(这四个与标签相关的功能)。

screen shot of my Window menu

buildMenuWithBuilder中,我可以删除一些项目(子菜单),如下所示:

[builder removeMenuForIdentifier:UIMenuMinimizeAndZoom];

但是包含选项卡功能的子菜单没有defined identifier。更重要的是,buildMenuWithBuilder运行时尚不存在。如果我将此代码放在该方法的末尾...

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

...然后,test2仅包含两个默认菜单UIMenuMinimizeAndZoomUIMenuBringAllToFront,以及我的自定义菜单。因此,即使我有它的标识符,我怀疑在这里删除它也不会起作用。

更奇怪的是,即使我使用insertChildMenu:atStartOfMenuForIdentifier:一个接一个地添加菜单,它还是出现在我的两个自定义菜单之间。

最后,我注意到当我打开第二个场景(在新的Mac窗口中)时,这些选项卡选项将从“窗口”菜单中消失,并且不会再出现。似乎macOS最初决定这些功能可能与我的应用程序相关,但是随后在打开场景时,它确定它们不相关并删除了它们。所以我想知道是否有一种方法可以从一开始就告诉macOS不包含这些菜单项?

我认为这可能与NSWindow属性tabbingMode有关,但是将主窗口设置为NSWindowTabbingModeDisallowed没什么区别。我唯一的Mac开发经验是通过Mac Catalyst,所以我不知道还能尝试什么。

解决方法

我认为,如果您完全禁用标签页,它们将会消失。这有点hack,因为您需要调用AppKit代码,但是Apple工程师给了我:

Class _nswindow = NSClassFromString(@“ NSWindow”); [_nswindow setAllowsAutomaticWindowTabbing:NO];

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...