swift - SwiftUI:检查窗口(不是应用程序)是否已激活(成为前台)的方法
问题描述
当我的应用程序成为前台时,我需要在事件上调用一些方法
(我对每个视图都使用 ViewModel,所以我不仅可以从视图中调用 sth)
例如:
我的应用程序已运行;
将前台窗口更改为 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
}
}
}
}
解决方案
@SceneBuilder var body: some Scene {
WindowGroup {
SomeView()
//SOLUTION
.onReceive(NotificationCenter.default.publisher(for: NSApplication.didBecomeActiveNotification)) { (_) in
print("FUUUUUUUUUUUU")
}
//END SOLUTION
}
推荐阅读
- android - 等待设备时出错:AVD Pixel_2_API_30 的模拟器进程被杀死
- amazon-web-services - 无法在 Ubuntu 上安装 Galera Manger
- r - 编织到pdf时如何阻止rmarkdown生成“附加包”
- c - 为什么在 Linux 上调用 open() 会自动替换为 openat()?
- java - 使用 Hazelcast 客户端部署选项部署 Cassandra 驱动程序会出现以下错误
- r-markdown - 使用图像编织 Rmarkdown 文档时的 TOC 问题
- python - 如何使用 KIvy 中的弹出小部件(按钮)从类中访问小部件/ID
- python - 使用 continue 循环,和或
- c++ - 为什么不能覆盖继承的类虚函数?
- str-replace - str_replace 和 htmlspecialchars 不起作用