And*_*rew 3 macos swift swiftui
当我的应用程序变为前台时,我需要调用一些事件方法
(我为每个视图使用 ViewModel,所以我不仅可以从视图调用某些东西)
例如:
我的应用程序已运行;
将前台窗口更改为 Safari 应用程序。
将前台窗口更改为我的应用程序 - >调用一些方法。
.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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以按如下方式使用环境变量controlActiveState
:
@Environment(\.controlActiveState) var controlActiveState
Run Code Online (Sandbox Code Playgroud)
(更好的)
您可以将自定义 AppDelegate 与函数一起使用applicationDidBecomeActive
主应用程序文件:
import SwiftUI
@main
struct FileBoApp: App {
//SOLUTION p1
@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate : AppDelegate
//END SOLUTION p1
var body: some Scene {
/// bla bla bla
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序委托文件:
import Foundation
import SwiftUI
//SOLUTION p2
class AppDelegate: NSObject, NSApplicationDelegate {
func applicationDidBecomeActive(_ notification: Notification) {
print("FUUUUUUUUUUUU")
}
}
//END SOLUTION p2
Run Code Online (Sandbox Code Playgroud)
===============================================
( 选择 )
@SceneBuilder var body: some Scene {
WindowGroup {
SomeView()
//SOLUTION
.onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification)) { (_) in
print("FUUUUUUUUUUUU")
}
//END SOLUTION
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1493 次 |
最近记录: |