我需要能够在每次显示时动态修改NSMenu层次结构(添加/删除项目等)。例如:
为此,我有一个实现 NSMenuDelegate 协议的对象。方法 menuNeedsUpdate 第一次工作(2),但第二次打开子菜单时不起作用。 (每个跟踪会话只调用一次)
每次调用方法 menuWillOpen ,但是文档有以下警告,似乎使用此方法取消资格:
不要修改结构 菜单或此期间的菜单项 方法
有没有办法实现这个目标?
答案 0 :(得分:0)
您可以继承NSMenu并覆盖submenuAction:。
或者您可以订阅NSMenuWillSendActionNotification。
虽然听起来并不适合你,但仅供参考,NSMenuValidation是一个逐项更新菜单项的好地方。
答案 1 :(得分:0)
menuWillOpen将仅被调用一次。此时,您将填充菜单。
之后,不会再次调用menuWillOpen。但是,对菜单的任何更改都将实时进行。因此,当主要父菜单打开时,无论何时源数据发生更改(或者如果无法检测到更改,都会定期更新),请使用常规NSMenu API更新菜单。
确保在系统跟踪菜单时运行用于更新菜单的任何方法。