1

我有一个菜单项“foobar”,我需要在我的主窗口(应用程序委托)上启用,但在所有其他窗口上禁用。我想知道该怎么做,因为第一响应者的业务让我很困惑。这是我现在拥有的:

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

我可以看到在应用程序委托中调用了“validateMenuItem”,但在第二个窗口的控制器中没有调用它。

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

谢谢你的想法

4

1 回答 1

1

将您的应用程序委托设置为主窗口的委托,并实现以下方法:

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

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

关于第一响应者

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

编辑

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

一点图像提示:

在此处输入图像描述

于 2012-12-20T17:27:22.207 回答