SwiftUI .onAppear, wird nur einmal ausgeführt
In einer SwiftUI
App habe ich folgenden Code:
var body: some View {
VStack {
Spacer()
........
}
.onAppear {
.... I want to have some code here ....
.... to run when the view appears ....
}
}
Mein Problem ist, dass ich Code im .onAppear- Block ausführen möchte , damit er ausgeführt wird, wenn die App nach dem Start oder nach einer Weile im Hintergrund auf dem Bildschirm angezeigt wird. Es scheint jedoch, dass dieser Code beim Start der App nur einmal und danach nie mehr ausgeführt wird. Vermisse ich etwas Oder sollte ich eine andere Strategie anwenden, um das gewünschte Ergebnis zu erzielen?
Antworten
5 Frankenstein
Sie müssten das Ereignis beobachten, wenn die App in den Vordergrund tritt, und es mit @Published
dem veröffentlichen ContentView
. Hier ist wie:
struct ContentView: View {
@ObservedObject var observer = Observer()
var body: some View {
VStack {
Spacer()
//...
}
.onReceive(self.observer.$enteredForeground) { _ in
print("App entered foreground!") // do stuff here
}
}
}
class Observer: ObservableObject {
@Published var enteredForeground = true
init() {
if #available(iOS 13.0, *) {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIScene.willEnterForegroundNotification, object: nil)
} else {
NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
}
}
@objc func willEnterForeground() {
enteredForeground.toggle()
}
}