NSWindow代表(windowShouldClose)

时间:2009-07-07 15:09:01

标签: cocoa

在我的第一个Cocoa应用程序中,我只有一个窗口,其中包含2个NSTextField实例 - 用于用户文本输入和文本处理输出。

如果我的用户点击左上角的红色x,则窗口会关闭,但应用程序仍在运行且图标停留在停靠栏中 - 正常的Mac行为。

当用户双击停靠栏或桌面上的图标时,这不会重新打开窗口 - 显然也是正常的Mac行为,但会让用户感到困惑。

要让应用程序恢复运行状态,用户必须从主菜单或上下文菜单强制退出,并通过单击其中一个图标重新启动应用程序。

我搜索了Apple文档和论坛,似乎以下内容应该阻止关闭窗口(我的第一个偏好:隐藏寡妇以便以后重新打开):

  1. 向NSApp添加委托

  2. 委托实现-applicationShouldHandleReopen调用[mainWindow makeKeyAndOrderFront:self];并返回TRUE

  3. 委托实现-windowShouldClose,返回FALSE 但是,虽然调用了-windowShouldClose,但窗口会关闭。

  4. 我在这里缺少什么?

    作为替代方案(我的第二个偏好),我添加了代理

    1. -applicationShouldTerminateAfterLastWindowClosed返回YES
    2. 这样可行,即当用户点击红色x时应用程序关闭, 并且用户可以稍后重新启动应用程序。

      对特定文档和工作代码示例的澄清和指示将不胜感激。

      鲁迪

2 个答案:

答案 0 :(得分:2)

“当用户双击停靠栏或桌面上的图标时,这不会重新打开窗口 - 显然也是正常的Mac行为,但会让用户感到困惑。”

如果您希望在这种情况下重新打开窗口,请实施applicationShouldHandleReopen:hasVisibleWindows:。当用户在关闭所有窗口后点击停靠栏图标时,打开一个窗口没有什么类似于Mac的东西;许多应用程序都会这样做,并且委托专门用于支持该行为。

答案 1 :(得分:1)

首先,在窗口关闭时终止应用程序的“替代”行为可能是适合您情况的首选方法。当用户无法关闭窗口时,可能会感到困惑。

如果你真的想阻止关闭窗口,为什么不在IB中禁用窗口上的关闭控件?