首页 > 解决方案 > 从窗口菜单中删除与选项卡相关的功能?

问题描述

我正在自定义我的 Mac Catalyst 应用程序中的菜单。正如您在以下屏幕截图中看到的那样,我添加了两个项目(“设置窗口大小”和“打开单独的文档查看器”)。但是我想去掉这两个项目之间出现的默认菜单项(四个与选项卡相关的功能)。

我的窗口菜单的屏幕截图

buildMenuWithBuilder中,我可以像这样删除一些项目(子菜单):

[builder removeMenuForIdentifier:UIMenuMinimizeAndZoom];

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

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

...然后 test2 仅包含两个默认菜单,UIMenuMinimizeAndZoomUIMenuBringAllToFront,以及我的自定义菜单。所以即使我有它的标识符,我怀疑在这里删除它也没有任何效果。

更奇怪的是,它出现在我的两个自定义菜单之间,即使我用insertChildMenu:atStartOfMenuForIdentifier:.

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

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

标签: objective-cmacosmac-catalystuimenu

解决方案


我认为如果您完全禁用标签,它们就会消失。这有点小技巧,因为您需要调用 AppKit 代码,但一位 Apple 工程师给了我:

类 _nswindow = NSClassFromString(@"NSWindow"); [_nswindow setAllowsAutomaticWindowTabbing:NO];


推荐阅读