2

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

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

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

我在 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,因为它们位于不同的 nib 中!

4

2 回答 2

5

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

或者(更好,IMO),您可以-validateMenuItem:WinAController那里实现并设置状态(这样,只有在用户实际看到它时才会设置状态):

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

    return YES;
}
于 2010-05-19T21:35:02.913 回答
1

我以为我告诉过你将窗口控制器放在 MainMenu.xib 中?

哦,好吧,没有冒险,没有收获。当然,您想要做的是以下内容:

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

@property(assign) IBOutlet NSMenuItem *winAMenuItem;

@end

然后你可以通过[[NSApp delegate] winAMenuItem];

于 2010-05-19T21:36:07.187 回答