关闭Mac应用程序(单击顶部的红叉),然后单击停靠图标重新打开

时间:2011-03-31 10:25:07

标签: objective-c cocoa xcode macos nswindow

当我关闭我的Mac应用程序时(通过单击窗口顶部栏上的红色十字按钮),应用程序图标将保留在底部的停靠栏中。现在这是正常的行为。当用户再次点击它时,它不会启动应用程序,除非用户完全退出应用程序并重新启动它。

Mac OS X上的类似示例是“活动监视器”。您可以通过单击顶部的红色十字按钮关闭应用程序,但停靠图标停留在那里。用户可以通过单击停靠图标重新打开它。

我如何在自己的应用程序中实现这一目标?

3 个答案:

答案 0 :(得分:21)

如果您仍然担心如何重新打开已关闭的窗口,请使用以下方法:

- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag {

[window makeKeyAndOrderFront:self];

return YES;
}

您可以使用它来处理停靠栏中应用程序图标的点击。

有关详细信息,请查看NSApplicationDelegate协议参考。

以下是文档:

http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSApplicationDelegate_Protocol/Reference/Reference.html

希望这有帮助!

答案 1 :(得分:3)

实施方法

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{ 
return NO; 
}

在你的app delegate

您的应用会在窗口关闭后徘徊,然后如果您实施

- (void)applicationDidBecomeActive:(NSNotification *)aNotification
{
//dock icon has just been clicked , or cmd-tabbed into
}

在app delegate

如果需要

,您可以在点击图标时执行操作,例如打开新窗口或旧窗口

有关其他相关应用事件,请参阅http://developer.apple.com/library/mac/#documentation/cocoa/reference/NSApplicationDelegate_Protocol/Reference/Reference.html

答案 2 :(得分:0)

我认为上述答案并非完全正确,为此,您应该覆盖applicationShouldHandleReopen(_:hasVisibleWindows:) https://developer.apple.com/reference/appkit/nsapplicationdelegate/1428638-applicationshouldhandlereopen