Добавление и удаление подменю из меню в Какао
Q: Как я добавляю или удаляю подменю из меню в Какао?
A: Как я добавляю или удаляю подменю из меню в Какао?
Использовать NSMenu методы как insertItem:atIndex: или removeItemAtIndex: добавить или удалить NSMenuItem к которому присоединяется рассматриваемое «подменю».
«Подменю» в Какао является просто экземпляром NSMenu, это просто, оказывается, присоединено к элементу в высокоуровневом меню. Другими словами, меню являются иерархическими, и подменю является любым меню кроме «высокоуровневого» меню. Когда Вы захотите добавить или удалить подменю, просто используйте NSMenu методы, чтобы добавить или удалить NSMenuItem самостоятельно. Не имеет значения, имеет ли тот элемент присоединенное подменю (hasSubmenu). Посмотрите
Обратите внимание на то, что сама строка меню приложения является экземпляром NSMenu в Какао. Это - пример меню верхнего уровня, и его стандартный «Файл», «Редактирование», и записи «Окна» являются пунктами меню с присоединенным подменю.
Для предоставления примера добавления и удаления подменю давайте предположим, что Вы хотите сделать дополнительное подменю adminstrative инструментов доступным на основе некоторого условия. Рисунок 1 показывает добавление NSMenuItem «Административные средства» с NSMenu присоединенный к нему, самому содержащий три NSMenuItems.

Одна опция состоит в том, чтобы программно выделить «Административные средства» NSMenuItem, NSMenu «подменю» и затем присоединяет его использование setSubmenu:. Однако этот пример показывает более обычно случай: просто создайте целое подменю в Интерфейсном Разработчике и соедините выход (здесь, adminMenuItem) относиться к нему. Целый элемент мог тогда быть добавлен или удален на основе некоторого условия, такого как успешная аутентификация.


Следующий код показывает, как установить начальное состояние путем удаления элемента, когда файл пера загружается и обеспечивает методы, чтобы добавить или удалить его по мере необходимости. Этот контроллер в качестве примера сохраняет индекс, где меню найдено в adminMenuItemIndex таким образом, это может позже быть восстановлено в том же расположении.
Перечисление 1 , Удаляющее меню первоначально, когда загружается файл пера.
- (void) awakeFromNib { adminMenuItemIndex = [[NSApp mainMenu] indexOfItem: adminMenuItem]; [self removeAdminMenuItem]; } |
Перечисление 2 , Удаляющее подменю при помощи его выхода.
- (void) removeAdminMenuItem { [adminMenuItem retain]; // ensure item and its submenu aren't dealloc'd when removed from mainMenu [[NSApp mainMenu] removeItem: adminMenuItem]; } |
Перечисление 3 , Добавляющее подменю к строке меню приложения.
- (void) addAdminMenuItem {
[[NSApp mainMenu]insertItem: adminMenuItem atIndex:adminMenuItemIndex];
[adminMenuItem release]; // maintain accurate retainCount since mainMenu will retain on insert
} |
История версии документа
| Дата | Примечания |
|---|---|
| 10.09.2007 | Редакционные исправления. |
| 30.08.2007 | Новый документ, объясняющий, как динамично добавить и удалить меню в приложении Какао. |