在每次打开时修改NSMenu结构?

Chr*_*ris 8 cocoa objective-c nsmenu nsmenuitem

我需要能够在每次显示时动态修改NSMenu层次结构(添加/删除项目等).例如:

  1. 用户在主菜单上启动跟踪会话并选择子菜单
  2. 检测子菜单即将打开并运行代码进行修改
  3. 继续跟踪,用户再次在同一个子菜单上跟踪:转到2

所以要做到这一点,我有一个实现NSMenuDelegate协议的对象.方法menuNeedsUpdate第一次工作(2),但第二次打开子菜单时不起作用.(每个跟踪会话只调用一次)

每次调用menuWillOpen方法,但是文档有以下警告,似乎使用此方法取消资格:

在此方法中,请勿修改菜单或菜单项的结构.

有没有办法实现这个目标?

jbt*_*ule 0

您可以子类化 NSMenu 并覆盖submenuAction:

或者您可以订阅NSMenuWillSendActionNotification

虽然听起来不太适合您,但仅供参考,NSMenuValidation是逐项更新菜单项的好地方。