gpt4 book ai didi

objective-c - 如何获取我在 Cocoa 中单击的菜单项的引用?

转载 作者:行者123 更新时间:2023-12-03 17:14:11 26 4
gpt4 key购买 nike

我有 2 个 nib 文件,MainMenu.xib,另一个由 NSWindowController 子类拥有。我在窗口面板上有 4 个选项,只能选择其中一个(如果选择另一个,我想在新选项上设置复选标记,并清除其他 3 个)

因此,我可以通过第一响应者路由所有内容并在 4 个菜单选项上设置标签,轻松判断选择了哪个菜单项。

然后,接收此操作的选择器只需查看该标记,并采取所需的操作。而且,作为 IBAction 的一部分,我得到了发件人的引用......所以我知道如何在其上设置复选标记。清除其他菜单项上的复选标记也可以通过使用 iVar 来跟踪最近点击的发件人来完成,然后我可以按照 Cocoa 文档的建议执行此操作:

[currentItem setState:NSOffState];
[sender setState:NSOnState];

现在问题归结为这是一个文档风格的应用程序。菜单选择是全局的,因此每当新文档窗口获得焦点时我都必须添加逻辑,并且当窗口失去焦点时添加类似的逻辑。

我找到了一个可以实现 -windowDidBecomeMain 的方法,它告诉我窗口 Controller 何时成为主窗口。但我没有看到相应的方法告诉我旧窗口失去焦点,因此它可以清理。

最佳答案

我找到了答案here .

其他方法是-windowDidResignMain-windowWillClose

编辑:我之前忽略的一个更好的答案是实现 -(BOOL)validateMenuItem:我认为这是一种仅通过返回值启用或禁用菜单项的方法,但我意识到我也可以提供设置状态的副作用。因此 NSWindowController 被设置为窗口委托(delegate)。当菜单打开时,将调用此方法,因此它对于事件窗口始终是当前的。

关于objective-c - 如何获取我在 Cocoa 中单击的菜单项的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11788616/

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