【发布时间】:2012-10-08 15:29:38
【问题描述】:
我正在尝试添加一个菜单项来显示主窗口。它在窗口没有被最小化或关闭(黄色 - 和红色 x 按钮)时启用,但当它有时,菜单项会变灰。这当然是无用和愚蠢的。 :)
另一个菜单项,文件/页面设置...没有以相同的方式灰显(最小化/关闭时)。我发现这个菜单项和我创建的菜单项之间的 IB 没有区别,除了标题。两者都连接到 First Responder 选择器(runPageLayout:用于页面设置,showWindow:用于我的),都具有键盘快捷键,并且都已启用。
同样,父菜单项是相同的,除了标题。
当用户按下红色 x 或黄色 - 按钮时,如何确保此 Show Main Window 菜单项可用?
编辑: 我通过取消选中父菜单项的 Auto Enables Items 使菜单项不灰显。
这使得应用程序的标准 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];
所以这就是现在剩下的了。如何在默认应用程序中模拟标准的“全部放在前面”菜单项?我将看一下 Apple 的一些标准窗口化 Mac 应用程序。
编辑 3: 我创建了一个标准的 Cocoa 应用程序,当窗口最小化时,它也会使窗口菜单中的所有菜单项变灰。但是默认的 NSDocument 会自动添加到这些下方,并且不会变灰。我会对这样的解决方案感到满意。
出于某种原因,在我的 Window 菜单中,我的 NSDocument 不会自动出现。 Info.plist 是相同的(当然,除了指向不同命名的 NSDocument 类)。
我该怎么做
a) 以编程方式将文档添加到该菜单,
b) 让窗口菜单像在标准应用程序中一样自动添加它,或者
c) 用我的标准应用程序中表现如预期的窗口菜单替换我的“损坏”窗口菜单(如果是这种情况)?
【问题讨论】:
标签: cocoa menu nsmenuitem