首页 > 解决方案 > SwiftUI:检查窗口(不是应用程序)是否已激活(成为前台)的方法

问题描述

当我的应用程序成为前台时,我需要在事件上调用一些方法

(我对每个视图都使用 ViewModel,所以我不仅可以从视图中调用 sth)

例如:

  1. 我的应用程序已运行;

  2. 将前台窗口更改为 Safari 应用程序。

  3. 将前台窗口更改为我的应用程序 -> 调用了一些方法。

.onChange(of: scenePhase) -> .active这种情况下没有任何反应

所以这些代码对我来说不是解决方案:

struct ContentView: View {
    @Environment(\.scenePhase) private var scenePhase
    var body: some View {
        TestView()
            .onChange(of: scenePhase) { phase in
                switch phase {
                    case .active:
                        print("App is active")
                    default:
                        break
                }
            }
    }
}

标签: swiftmacosswiftui

解决方案


    @SceneBuilder var body: some Scene {
        WindowGroup {
            SomeView()
//SOLUTION
                .onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification)) { (_) in
                          print("FUUUUUUUUUUUU")
                        }
//END SOLUTION
            
        }

推荐阅读