如何强制NSMenuItem重绘?

时间:2010-07-21 10:49:02

标签: cocoa nsmenu nsmenuitem nsstatusitem

我正在实现自定义状态栏菜单,该菜单具有NSSearchField的自定义视图。我正在根据搜索结果更新菜单项的数量。菜单项的数量在NSSearchField中更改为用户类型。我注意到,如果结果数量保持不变,则不会更新项目标题(重新绘制)。如何强制他们重绘?

在重建菜单的功能中,我首先删除所有项目,然后根据搜索结果创建新项目。

谢谢,

纳瓦

2 个答案:

答案 0 :(得分:2)

我可以通过以下方法实现它:当搜索结果的数量相同时,我不重新创建它们,只需更改标题并调用itemChanged:。当计数不同时,我重新创建菜单项。无论如何这都有效。但无论如何我被告知为此目的从使用菜单回来。

答案 1 :(得分:1)

当您想要更新菜单时,在menuChangedMessagesEnabled设置为YES的菜单上

[menu setMenuChangedMessagesEnabled:NO];
// change the menu
[menu setMenuChangedMessagesEnabled:YES];

第二次调用会导致菜单应用更改。第一个是您可以一起批量处理一组更改。

也就是说,苹果指南不鼓励在菜单打开时更改菜单,因为用户不习惯此菜单并且可能会让人感到困惑。如果可行,请尝试重新设计您的应用,以便您可以使用其他内容,例如表格或矩阵,而不是菜单。