gpt4 book ai didi

objective-c - 从 MainMenu 获取特定菜单项

转载 作者:行者123 更新时间:2023-12-03 16:26:18 25 4
gpt4 key购买 nike

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

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

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

我在 MainMenu 上的“Window”顶级菜单项下面有一个菜单项,它调用 [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 中!

最佳答案

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

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

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

return YES;
}

关于objective-c - 从 MainMenu 获取特定菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2869424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com