【问题标题】:How to set up a custom "Open Recent" submenu in macOS如何在 macOS 中设置自定义“打开最近”子菜单
【发布时间】:2019-04-11 17:42:27
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: macos nsmenu


    【解决方案1】:

    以防万一其他人遇到这个奇怪的问题,这里是如何使它工作:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 2014-06-06
      相关资源
      最近更新 更多