我有 2 个 nib 文件 MainMenu.xib 和另一个由 NSWindowController 子类拥有。我在一个窗口面板上有 4 个选项,其中只能选择一个(如果选择了另一个,我想在新的上设置复选标记,并清除其他 3 个)
因此,我可以通过 First Responder 路由所有内容并在 4 个菜单选项上设置标签,从而轻松判断选择了哪个菜单项。
然后,接收此操作的选择器只查看标签,并采取所需的操作。而且,作为 IBAction 的一部分,我得到了对发件人的引用......所以我知道如何在它上面设置复选标记。清除另一个菜单项上的复选标记也可以通过使用 iVar 来跟踪最近点击的发件人,然后我可以这样做,正如 Cocoa 文档所建议的那样:
[currentItem setState:NSOffState];
[sender setState:NSOnState];
现在问题归结为这是一个文档样式的应用程序。菜单选择是全局的,因此每当新文档窗口获得焦点时我都必须添加逻辑,并且在窗口失去焦点时添加类似的逻辑。
我找到了一种我可以实现的方法-windowDidBecomeMain
,它告诉我我的窗口控制器何时成为主窗口。但我没有看到相应的方法告诉我旧窗口失去焦点,因此它可以清理。