gpt4 book ai didi

objective-c - Cocoa 在多个窗口中验证菜单项

转载 作者:行者123 更新时间:2023-12-03 17:13:31 25 4
gpt4 key购买 nike

我有一个菜单项“foobar”,我需要在主窗口(应用程序委托(delegate))上启用它,但在所有其他窗口上禁用它。我想知道如何做到这一点,因为第一响应者业务对我来说非常令人困惑。这是我现在拥有的:

  • “foobar”项目连接到 MainMenu.xib 中第一响应者的“foobar:”自定义操作
  • 主应用程序委托(delegate)中有一个“foobar:”操作,因此菜单项已启用并正常工作
  • 现在我加载并“makeKeyAndOrderFront”另一个窗口
  • 我将一些控制集中在新窗口上
  • 这是我的“foobar”项目应该被禁用的地方,但事实并非如此

我可以看到“validateMenuItem”正在应用程序委托(delegate)中被调用,但它没有在第二个窗口的 Controller 中被调用。

有人可以用非常简单的术语向我解释为什么会发生这种情况以及我必须采取哪些选择来解决这个问题?

感谢您的想法

最佳答案

将您的应用程序委托(delegate)设置为主窗口的委托(delegate),并实现这些方法:

- (void)windowDidBecomeKey:(NSNotification *)notification
{
[foobar setEnabled: YES];
}

- (void)windowDidResignKey:(NSNotification *)notification
{
[foobar setEnabled: NO];
}

关于第一响应者

第一响应者是窗口内的 NSControl。例如,在特定窗口上,您有两个文本字段:textField1 和 textField2。当您键入输入时,输入将仅转到第一响应者(所有接受的控件之间的一个)所以你需要知道哪个窗口是关键,你不需要知道在你的具体情况下谁是第一响应者。

编辑

还有另一种(可能更快,但取决于个人喜好)方法:通过界面生成器,选择仅在某个窗口为关键时才启用的菜单项。假设该窗口是名为 window1 的应用程序委托(delegate)的 ivar。然后单击该菜单项,转到绑定(bind)检查器,在“启用”下选择绑定(bind)到:应用程序委托(delegate),模型 key 路径:self.window.isKeyWindow。

一些图像提示:

enter image description here

关于objective-c - Cocoa 在多个窗口中验证菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13976298/

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