objective-c - 从窗口菜单中删除与选项卡相关的功能?
问题描述
我正在自定义我的 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,所以我不知道还能尝试什么。
解决方案
我认为如果您完全禁用标签,它们就会消失。这有点小技巧,因为您需要调用 AppKit 代码,但一位 Apple 工程师给了我:
类 _nswindow = NSClassFromString(@"NSWindow"); [_nswindow setAllowsAutomaticWindowTabbing:NO];
推荐阅读
- angular - 为什么dryRun命令用于角度?
- html - 与通配符一起使用时,CSS 显示属性会中断
- javascript - 打字稿不/不能在泛型上使用传递的类型
- javascript - 在一个ajax中组合两个URL
- swiftui - 如何将对象绑定中的属性作为正常状态变量传递给子视图
- vue.js - 如何在 Vue.js 中为多个角色和用户创建登录名
- sass - 有没有办法在 Nuxt.js 中使用 sass 而不是 node-sass(sass-loader 的默认值)?
- database - 是否可以在 casssandra 中存储逗号分隔值
- ruby - 如何将base64编码文件传递给ruby irb中的http post请求?
- node.js - Windows 上的 Node.js 和堆内存不足