Mac应用程序,menuitem使主窗口在关闭/最小化时变为灰色

时间:2012-10-18 08:22:41

标签: cocoa menu nsmenuitem

我正在尝试添加一个菜单项来显示主窗口。当窗口未被最小化或关闭时(黄色 - 和红色x按钮)启用它,但是当它具有时,菜单项显示为灰色。那当然是无用而愚蠢的。 :)

另一个菜单项,文件/页面设置...不会以相同的方式变灰(在最小化/关闭时)。我发现此菜单项与我创建的菜单项之间没有IB差异,除了标题。两者都连接到First Responder选择器(runPageLayout:用于页面设置,showWindow:用于我的),两者都有键盘快捷键,并且都启用了。

同样,除标题外,父菜单项是相同的。

当用户按下红色x或黄色按钮时,如何确保此“显示主窗口”菜单项可用?

修改 通过取消选中父菜单项的“自动启用项目”,我使菜单项不灰显。

这使得在应用程序的标准NSDocument类中使用此方法:

- (IBAction)clickMinimizeButton:(id)sender {
    NSWindow *ww=[[NSApplication sharedApplication] mainWindow];
    NSLog(@"%@",ww);
}

而ww是一个有效的对象。

问题是,我无法从最小化/关闭状态恢复窗口,因为方法在 时不会被调用。

当窗口最小化/关闭时,如何调用此方法?我想简单地做一些与最小化或关闭点击相反的事情。

应用程序中只有一个窗口,再次单击停靠栏图标会显示窗口,但Apple需要一个菜单​​项才能完成相同的操作。

似乎我必须将菜单项连接到由我创建的自定义应用程序方法(例如,当然没有应用程序方法可以恢复所有窗口),但我不知道在哪里声明它,因为我'我对Cocoa的体验不如Cocoa Touch。

编辑2: 从上面开始,我在应用程序委托中创建了一个方法,并将其连接到菜单项。即使在最小化时也会调用该方法,但我不知道恢复主窗口的正确代码。这种绝望的尝试当然只会激活已经激活的应用程序,而不是最小化的窗口。

NSApplication *theapp=[NSApplication sharedApplication];
[theapp activateIgnoringOtherApps:YES];

所以这就是现在剩下的一切。如何在默认应用程序中模拟标准的“Bring All to Front”菜单项?我将看看Apple的一些标准窗口Mac应用程序。

编辑3: 我创建了一个标准的Cocoa应用程序,当窗口最小化时,它也会使窗口菜单中的所有菜单项变灰。但默认的NSDocument会自动添加到这些下面,并且不会显示为灰色。我会对这样的解决方案感到满意。

出于某种原因,在我的窗口菜单中,我的NSDocument会自动显示。 Info.plists是相同的(除了指向不同名称的NSDocument类,当然)。

我如何

a)以编程方式将文档添加到该菜单

b)让Window菜单自动添加,就像在标准应用程序中一样,或

c)用标准应用程序中的窗口菜单替换我的“损坏的”窗口菜单(如果是这种情况),其行为符合预期?

2 个答案:

答案 0 :(得分:0)

尝试将您的方法重命名为其他内容。已在NSWindowController中声明showWindow:,这可能会产生冲突。还要确保不会释放假定响应菜单项的对象。

答案 1 :(得分:0)

你实现了showWindow吗?

- (void)showWindow {
    if (!self.window) {
        [NSBundle loadNibNamed:@"MainWin" owner:self];
    }

    [self.window makeKeyAndOrderFront:self];
}

P.S。关闭窗口window - > autoreleasedBehavior Release When Closed不得{/ 1}}