SwiftUI:如何让您的应用程序在单击应用程序的停靠栏图标时出现在最前面?

Mar*_*ark 5 dock appdelegate swiftui

当 SwiftUI 应用程序最小化并单击停靠图标时。该应用程序不会像其他应用程序一样被减少并放在前面。

import SwiftUI

@main
struct MyApp: App {
    @NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            MainView()
        }
    }
}

class AppDelegate: NSObject, NSApplicationDelegate {
    func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
        // THIS IS NEVER CALLED!!!
        if !flag {
            for window: AnyObject in sender.windows {
                window.makeKeyAndOrderFront(self)
            }
        }
        
        return true
    }
}
Run Code Online (Sandbox Code Playgroud)

其他委托方法(例如 applicationDidLaunch)确实会被调用,因此这不是链接问题。有谁知道如何让它发挥作用?

对阿斯佩里的评论 在此输入图像描述

Asp*_*eri 1

使用确实成为主动回调,测试与 Xcode 13.3 / macOS 12.2.1 一起使用

喜欢,

func applicationDidBecomeActive(_ notification: Notification) {
    if NSApp.windows.compactMap({ $0.isVisible ? Optional(true) : nil }).isEmpty {
         NSApp.windows.first?.makeKeyAndOrderFront(self)
    }
}
Run Code Online (Sandbox Code Playgroud)

项目中的测试模块在这里

注意:如果应用程序处于活动状态,则只能application(Will/Did)Update通过单击 Dock 图标来调用。