【问题标题】:Cocoa: programmatically show the main window after closing it with XCocoa:用 X 关闭主窗口后以编程方式显示主窗口
【发布时间】:2011-06-01 13:30:16
【问题描述】:

我想在用户使用 X 按钮关闭 Cocoa 应用程序后以编程方式重新打开它的主窗口。 我知道它还在记忆中的某个地方,但我不知道在哪里。

【问题讨论】:

    标签: objective-c cocoa macos


    【解决方案1】:

    如果您使用默认的 Cocoa 应用程序模板,您的应用程序委托将引用 MainMenu.xib 中的窗口。你可以简单地调用

    [window makeKeyAndOrderFront:self];
    

    也许在一个菜单项触发的IBAction 中,重新打开窗口。注意:请确保在 IB 中未选中“关闭时释放”和“一次性”框。

    【讨论】:

    • 我正在尝试做同样的事情。我使用模板创建了一个新应用程序。我不完全确定上述内容应该去哪里。它应该在我的 AppDelegate 类的某个地方吗?即使关闭窗口,该类是否继续“运行”?
    • 是的,是的。您的 nib 中有一个对象,它是应用程序委托的一个实例;它通常在程序运行的整个过程中都处于活动状态。
    • 谢谢!帮我!我差点忘了 makeKeyAndOrderFront 方法
    • 只有在没有释放窗口的情况下才会起作用——这可能会发生,并且对于 Windows 来说是一个可行的选择。
    【解决方案2】:

    当然,如果用户关闭一个窗口,他们希望它消失。重新打开他们刚刚关闭的窗口很可能会惹恼他们。如果您,程序员,不尊重他们的意愿,他们可能会将您的程序移至垃圾箱,从而不尊重您的程序。

    如果您想让主窗口无法关闭,请禁用关闭按钮。您可以在 Window 属性检查器的界面生成器中轻松完成此操作。

    【讨论】:

    • 警告通常是合理的,但我不确定问题是“我怎样才能通过不允许关闭窗口来给用户手指?”我把它读作“用户可能需要在关闭窗口后重新显示它。我该怎么做?” (例如,请参阅 Activity Monitor 等,了解此行为 - 有一个菜单项会在关闭后返回主应用程序窗口。)
    • 我不想将窗口推送给用户。在他们单击“打开”按钮后,我试图以编程方式触发它。
    • 我同意 Jeremy,但 Apple 不同意。我认为他们的 HIG 要求有点古怪,但如果我希望他们在 App Store 中发布我的东西,那么在他们决定调用 HIG 指南的情况下(例如在提交时旨在修复以前批准的应用程序中的实际错误) ,那么我猜你可以选择 awakeFromNib 或 gtfo。在与他们的最新一轮比赛中,我的眼底充满了愤怒的泪水。但是,他们赢了。我更想进入 App Store,而不是坚持下去。
    • 很大程度上取决于场景。如果用户将文件放在 Dock 或 finder 中的应用程序图标上 - 并且应用程序的窗口之前已关闭,这几乎就像告诉应用程序“请在新窗口中打开此文件”一样。当您是“基于文档的应用程序”时,该场景会自动处理,但如果您只有一个硬连线的“主”窗口 - 您需要自己重新打开该窗口以显示新内容。
    • 这个答案没有回答提出的问题。似乎这应该是对主要问题的评论(如果有的话)。无论如何,重新打开应用程序的主窗口是有正当理由的。例如,如果应用程序的主窗口关闭,但仍有一个状态栏项具有重新打开主窗口的功能。
    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多