如何在macOS中设置自定义“最近打开的”子菜单

时间:2019-04-11 17:42:28

标签: macos nsmenu

使用新的“文档”项目创建的“最近打开”菜单发生了一些非常奇怪的事情。

即使在Interface Builder中,它看起来也像其他菜单一样,它具有一些隐藏的特殊行为,它会出现。

我试图通过将菜单的委托设置为AppDelegate来创建自己的菜单项,然后在其中实现menuWillOpen处理程序。但是,它永远不会被调用。即使在IB中看起来相同,对新添加的子菜单也可以这样做。

这实际上不再是一个问题。我原本是作为一个问题写这个的,不理解为什么我不能更新此菜单,但是现在看来,我只需要删除默认菜单并添加自己的菜单即可,而不用修改自动创建的菜单。

1 个答案:

答案 0 :(得分:0)

以防万一其他人遇到这个奇怪的问题,请按以下步骤操作:

  1. 创建一个新的“打开最近的”子菜单,就像默认添加的子菜单一样,然后删除原始的子菜单。另一种方法可能是直接编辑情节提要板文件,然后从默认菜单中删除systemMenu属性,如下所示:<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="...">
  2. 如果立即运行该应用程序,您将看到两个菜单,因为NSDocumentController会自动再次创建一个菜单。为防止这种情况,请创建NSDocumentController的自定义子类,并在其中实现以下代码:
- (NSUInteger)maximumRecentDocumentCount    {
    return 0;
}
  1. 要注册自定义控制器,请在AppDelegate的[CustomDocumentController sharedDocumentController];方法中调用其init

  2. 将新创建的子菜单的委托分配给AppDelegate并在AppDelegate中实现此方法:

- (void)menuWillOpen:(NSMenu *)menu {
    // Add your menu items here
}