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

问题描述 投票:0回答:1

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

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

我曾尝试在该菜单中创建自己的项目列表,方法是将其委托设置为我的AppDelegate,然后在那里实现menuWillOpen处理程序。但是,它永远不会被调用。对新添加的子菜单执行相同操作,即使它在IB中看起来相同,也可以。

这实际上不再是一个问题了。我最初写这个是一个问题,不理解为什么我无法更新这个菜单,但现在看来我只需要删除默认值并添加我自己的而不是修改自动创建的菜单。

macos nsmenu
1个回答
0
投票

为了防止其他人遇到这个奇怪的问题,以下是如何使其工作:

  1. 创建一个新的“打开最近”子菜单,就像默认添加的子菜单一样,然后删除原始子菜单。另一种方法可能是直接编辑storyboard文件并从默认菜单中删除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
}
© www.soinside.com 2019 - 2024. All rights reserved.