我正在实现一个自定义状态栏菜单,它有一个带有 NSSearchField 的自定义视图。我正在根据搜索结果更新菜单项的数量。菜单项的数量随着用户在 NSSearchField 中的类型而改变。我注意到,如果结果数量保持不变,则项目标题不会更新(重绘)。我如何强制他们重绘?
在重建菜单的函数中,我首先删除所有项目,然后根据搜索结果创建新项目。
谢谢,
纳瓦
我正在实现一个自定义状态栏菜单,它有一个带有 NSSearchField 的自定义视图。我正在根据搜索结果更新菜单项的数量。菜单项的数量随着用户在 NSSearchField 中的类型而改变。我注意到,如果结果数量保持不变,则项目标题不会更新(重绘)。我如何强制他们重绘?
在重建菜单的函数中,我首先删除所有项目,然后根据搜索结果创建新项目。
谢谢,
纳瓦
我可以通过以下方法实现它:当搜索结果的数量相同时,我不重新创建它们,只需更改标题并调用 itemChanged:。当计数不同时,我重新创建菜单项。这无论如何都有效。但无论如何,我被建议不要为此使用菜单。
在菜单上设置menuChangedMessagesEnabled
为YES
您想要更新菜单的时间:
[menu setMenuChangedMessagesEnabled:NO];
// change the menu
[menu setMenuChangedMessagesEnabled:YES];
第二次调用使菜单应用更改。第一个是您可以将一组更改一起批处理。
也就是说,Apple 指南不鼓励在菜单打开时更改菜单,因为用户不习惯这样做并且可能会造成混淆。如果可行,请尝试重新设计您的应用程序,以便您可以使用其他东西,例如表格或矩阵,而不是菜单。