从MainMenu获取特定菜单项

Gar*_*tet 2 xcode cocoa objective-c nsmenuitem

我有一个包含窗口的笔尖(winA.xib).我的app委托包含一个名为WinAController的NSWindowController子类.

WinAController有一个属性(NSMenu*mainMenu),我想指向MainMenu.我用以下代码实例化WinAController后设置了它:

    WinAController = [[WinAController alloc] initWithWindowNibName:@"WinA"];
    WinAController.mainMenu = [NSApp mainMenu];
Run Code Online (Sandbox Code Playgroud)

我在MainMenu上的"Window"顶级菜单项下面有一个菜单项,它调用[WinAController showWindow]方法并显示WinA.我想根据WinA是否可见来切换此菜单项的开/关状态.WinAController还有另一个属性(NSMenuItem*myMenuItem).

如何获取"Window"顶级菜单项的子菜单的引用.我想要获得的子菜单项的标题是"Command".我试过这个:

    if (mainMenu != nil) {
    myMenuItem = [mainMenu itemAtIndex:[mainMenu indexOfItemWithTitle:@"Command"]];
}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用.

我哪里错了?

谢谢,

编辑:我现在已将WinAController放在mainMenu.xib中.我已经将WinA(在winA.xib中)文件的所有者设置为类WinAController,但我无法弄清楚如何将WinAController的窗口IBOutlet连接到WinA,因为它们位于不同的笔尖中!

Wev*_*vah 5

您可以直接存储对菜单项的引用,可以通过主笔尖中的IBOutlet存储.

或者(更好的是,IMO),你可以-validateMenuItem:WinAController那里实现并设置状态(这样,状态仅在用户实际看到它时设置):

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

    return YES;
}
Run Code Online (Sandbox Code Playgroud)