在我的第一个Cocoa应用程序中,我只有一个窗口,其中包含2个NSTextField
实例 - 用于用户文本输入和文本处理输出。
如果我的用户点击左上角的红色x,则窗口会关闭,但应用程序仍在运行且图标停留在停靠栏中 - 正常的Mac行为。
当用户双击停靠栏或桌面上的图标时,这不会重新打开窗口 - 显然也是正常的Mac行为,但会让用户感到困惑。
要让应用程序恢复运行状态,用户必须从主菜单或上下文菜单强制退出,并通过单击其中一个图标重新启动应用程序。
我搜索了Apple文档和论坛,似乎以下内容应该阻止关闭窗口(我的第一个偏好:隐藏寡妇以便以后重新打开):
向NSApp添加委托
委托实现-applicationShouldHandleReopen
调用[mainWindow makeKeyAndOrderFront:self];并返回TRUE
委托实现-windowShouldClose
,返回FALSE
但是,虽然调用了-windowShouldClose
,但窗口会关闭。
我在这里缺少什么?
作为替代方案(我的第二个偏好),我添加了代理
-applicationShouldTerminateAfterLastWindowClosed
返回YES 这样可行,即当用户点击红色x时应用程序关闭, 并且用户可以稍后重新启动应用程序。
对特定文档和工作代码示例的澄清和指示将不胜感激。
鲁迪
答案 0 :(得分:2)
“当用户双击停靠栏或桌面上的图标时,这不会重新打开窗口 - 显然也是正常的Mac行为,但会让用户感到困惑。”
如果您希望在这种情况下重新打开窗口,请实施applicationShouldHandleReopen:hasVisibleWindows:
。当用户在关闭所有窗口后点击停靠栏图标时,打开一个窗口没有什么类似于Mac的东西;许多应用程序都会这样做,并且委托专门用于支持该行为。
答案 1 :(得分:1)
首先,在窗口关闭时终止应用程序的“替代”行为可能是适合您情况的首选方法。当用户无法关闭窗口时,可能会感到困惑。
如果你真的想阻止关闭窗口,为什么不在IB中禁用窗口上的关闭控件?