【问题标题】:Closing Mac application (clicking red cross on top) and reopening by clicking dock icon关闭 Mac 应用程序(单击顶部的红叉)并通过单击停靠图标重新打开
【发布时间】:2011-07-26 18:48:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: objective-c cocoa xcode macos nswindow


    【解决方案1】:

    实现方法

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

    在您的应用委托中

    你的应用会在窗口关闭后挂起,如果你实现了

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

    在应用委托中

    你可以在点击图标时做一些事情,比如如果你需要打开一个新的或旧的窗口

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

    【讨论】:

    • 他是说在 applicationDidBecomeActive 中可以查看应用程序是否无窗口,如果是,则打开一个新的空白窗口(或类似窗口)。
    【解决方案2】:

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

    - (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag {
    
    [window makeKeyAndOrderFront:self];
    
    return YES;
    }
    

    您可以使用它来处理对 Dock 中应用程序图标的点击。

    有关更多信息,请查看 NSApplicationDelegate 协议参考。

    这是文档:

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

    希望这会有所帮助!

    最新更新:

    在带有 Swift 5.2 的 MacOS 10.15 上的最新 Xcode 11.4 中,MacOS SwiftUI 应用程序中存在同样的问题。在 AppDelegates.swift 中添加以下代码可以解决问题。

    func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
        if !flag{
            window.makeKeyAndOrderFront(nil)
        }
        return true
    }
    

    【讨论】:

      【解决方案3】:

      我认为上面的答案并不完全正确,要实现这一点,您应该覆盖 applicationShouldHandleReopen(_:hasVisibleWindows:) https://developer.apple.com/reference/appkit/nsapplicationdelegate/1428638-applicationshouldhandlereopen

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-29
        • 2013-11-22
        • 2013-12-03
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        相关资源
        最近更新 更多