Как заставить NSMenuItem перерисовать? - PullRequest
1 голос
/ 21 июля 2010

Я реализую пользовательское меню строки состояния, которое имеет настраиваемое представление с NSSearchField.Я обновляю количество пунктов меню в соответствии с результатами поиска.Количество пунктов меню изменяется как пользовательские типы в NSSearchField.Я заметил, что если количество результатов остается неизменным, названия элементов не обновляются (перерисовываются).Как заставить их перерисовать?

В функции, которая перестраивает меню, я сначала удаляю все элементы, а затем создаю новые элементы в соответствии с результатами поиска.1006 * Нав

Ответы [ 2 ]

2 голосов
/ 22 июля 2010

Я мог бы добиться этого следующим подходом: Когда количество результатов поиска одинаково, я не воссоздаю их, просто меняю заголовок и вызываю itemChanged :. Когда счет отличается, я воссоздаю пункты меню. Это работает в любом случае. Но мне все равно посоветовали отказаться от использования меню для этих целей.

1 голос
/ 21 июля 2010

в меню установите menuChangedMessagesEnabled на YES, если вы хотите обновить меню:

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

Второй вызов вызывает изменения в меню. Во-первых, вы можете группировать изменения вместе.

Тем не менее, руководящие принципы Apple не рекомендуют менять меню, когда они открыты, поскольку пользователи не привыкли к этому и могут вводить в заблуждение. Если это возможно, попытайтесь изменить дизайн своего приложения, чтобы вы могли использовать что-то другое, например, таблицу или матрицу вместо меню.

...