Получение определенного пункта меню из MainMenu - PullRequest
2 голосов
/ 20 мая 2010

У меня есть перо (winA.xib), которое содержит окно. Мой делегат приложения содержит подкласс NSWindowController, называемый WinAController.

WinAController имеет свойство (NSMenu * mainMenu), которое я хочу указать на MainMenu. Я установил его после того, как я создал экземпляр WinAController с таким кодом:

    WinAController = [[WinAController alloc] initWithWindowNibName:@"WinA"];
    WinAController.mainMenu = [NSApp mainMenu];

У меня есть пункт меню под элементом верхнего уровня "Window" в MainMenu, который вызывает метод [WinAController showWindow] и отображает WinA. Я хочу включить / выключить состояние этого пункта меню в зависимости от того, виден ли WinA или нет. WinAController также имеет другое свойство (NSMenuItem * myMenuItem).

Как получить ссылку на подменю пункта меню "Окно" верхнего уровня. Название элемента подменю, которое я хочу получить, - «Команда». Я пробовал это:

    if (mainMenu != nil) {
    myMenuItem = [mainMenu itemAtIndex:[mainMenu indexOfItemWithTitle:@"Command"]];
}

Но, похоже, это не работает.

Куда я иду не так?

Спасибо

Редактировать: Теперь я поместил WinAController в mainMenu.xib. Я установил владельца файла WinA (в winA.xib) для класса WinAController, но я не могу понять, как подключить окно WinAController IBOutlet к WinA, поскольку они находятся в разных кончиках!

Ответы [ 2 ]

5 голосов
/ 20 мая 2010

Вы можете сохранить ссылку на ваш пункт меню напрямую, возможно, через IBOutlet в вашем главном пере.

Или (лучше IMO), вы можете реализовать -validateMenuItem: в WinAController и установить там состояние (таким образом, состояние устанавливается только тогда, когда пользователь действительно его увидит):

- (BOOL)validateMenuItem:(NSMenuItem *)item {
    if ([item action] == @selector(showWindow:)]
        [item setState:[winA isVisible] ? NSOnState : NSOffState];

    return YES;
}
1 голос
/ 20 мая 2010

Я думал, что сказал вам поместить контроллеры окон в MainMenu.xib?

Ну, ничего, не рискнул, ничего не получил. Что вы хотите сделать, конечно, следующее:

@interface MyApplicationDelegate : NSObject {
  IBOutlet NSMenuItem *winAMenuItem;
}

@property(assign) IBOutlet NSMenuItem *winAMenuItem;

@end

Тогда вы можете получить доступ к этому через [[NSApp delegate] winAMenuItem];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...