【问题标题】:Where is my closed NSWindow?我关闭的 NSWindow 在哪里?
【发布时间】:2018-03-07 16:09:25
【问题描述】:

我有一个应用程序委托,它持有对 NSWindow 的引用,并且程序(到目前为止的小型测试程序)通常使用主菜单和窗口中的视图。

但是我发现,如果我关闭包含视图的窗口,它就会消失,尽管程序仍在运行。据我所知,窗口引用不是 nil,但我如何恢复它以便它再次可见并显示在 Windows 菜单下?

该程序不是基于文档的。所有操作都在相关窗口中执行。

我在 MainMenu.xib 中创建了由 Xcode 自动创建的窗口(这是在 Xcode7 或 8 中,但现在我已升级到 9)。

我是 Mac 上的 Windows 处理新手,所以我知道这是一个非常基本的问题,但我完全被困在这里。拥有一个本应包含所有功能的窗口在用户无法恢复的情况下消失了,我认为这很糟糕。

【问题讨论】:

  • 如果关闭窗口对您的应用没有意义,您可以禁用关闭按钮并从“文件”菜单中删除“关闭”。
  • 是的,我正在考虑这一点,但我觉得我需要了解如何恢复 Windows。感谢您的建议。

标签: objective-c macos cocoa nswindow


【解决方案1】:

如果你有对 NSWindow 的引用,你只需要显示它。例如:

[window makeKeyAndOrderFront:self];

但如果用户关闭了您应用的单个窗口,那么问题是:用户将如何触发该代码?最简单的答案是用户将单击 Dock 上的应用程序图标。要处理该点击,请在您的应用委托上实现以下方法。

- (BOOL)applicationShouldHandleReopen:(NSApplication *)sender hasVisibleWindows:(BOOL)hasVisibleWindows
{
     if (hasVisibleWindows) {
         return YES;
     }
     [window makeKeyAndOrderFront:self];
     return NO;
}

【讨论】:

  • 太好了,就是这样。工作正常。现在我正在通过一个主菜单项来回应它,它只是一个原型。我只需要了解 Windows 的底层行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多