【发布时间】:2011-01-15 00:07:15
【问题描述】:
- 我有一些子菜单作为主菜单的窗口项子菜单插入
- 我有一个我的对象的实例(假设它的类名是 MenuController)从 NSObject 继承并支持 NSMenuDelegate 方法中的 2: – numberOfItemsInMenu: – menu:updateItem:atIndex:shouldCancel:
- 此实例作为蓝色对象添加到 NIB 中,以便在运行时唤醒
- 步骤 2-3 中的对象配置为子菜单的委托(步骤 1)
现在,我可以在运行时提供子菜单内容了。
接下来,我将执行以下操作:我可以添加新项目或从通过协议和委托映射到实际子菜单的数组(在包含菜单标题的 MenuController 内)中删除旧项目。 一切正常。 除了一件事:我喜欢为我的动态菜单项分配快捷方式。 CMD-1、CMD-2、CMD-3等
Window / MySubmenu / MyItem1 CMD-1, MyItem2 CMD-2, ...
所以,为了调用一些我不想去 Window / MySubmenu / MyItem 用鼠标点击它的项目,我只想按一个快捷键,比如 CMD-3 来调用项目。
好的,它会定期按预期工作。但是,一般来说,除了打开 Window / MySubmenu 以重新加载其内容外,我无法通知 Main Menu 我的嵌套子菜单更改。 重现问题的一种稳定方法 - 只需尝试删除某些项目并按下分配给它的旧快捷方式,在您创建新项目作为已删除的替换后 - 宾果游戏 - 在导航到 Window / MySubmenu 以查看当前子菜单内容之前快捷方式将不起作用.
我不知道强制主菜单重建其子菜单的方法... 我试过:[[NSApp mainMenu] update] 和游戏用 NSNotificationCenter 发送 NSMenuDidAddItemNotification, NSMenuDidRemoveItemNotification, NSMenuDidChangeItemNotification
我尝试了子菜单的出口并明确调用更新方法 - 没有办法...... 有时 AppKit 调用我的委托方法——我看到了,有时它不想调用任何东西。看起来像一个随机策略。
如何确保在“一些调用”之后我的子菜单在内部数组修改后处于实际状态?
【问题讨论】: