'SwiftUI sharing timer through views in navigation view
I'm pretty new at SwiftUI. I would like to make an app that navigates through different views in a Navigation View and running a timer in background presenting the time on each of the views. The problem is when I navigate to a second level of navigation. When the timer is on, the app returns automatically to the previous navigation view. Here's is a screenshot video of what I mean: https://youtu.be/eXbK9jpluvk
Here is my code:
import SwiftUI
struct ContentView: View {
@State var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
@State var seconds : Int = 0
@State var paused : Bool = true
var body: some View {
VStack {
Text("\(seconds)")
Button(action: {
paused.toggle()
}) {
Image(systemName: paused ? "play.fill" : "stop.fill")
}
NavigationLink(destination: FirstView( timerSeconds: $seconds, timerPaused: $paused)) {
Text("Navigate 1")
}.padding()
}
.onReceive(self.timer) { currentTime in
if !paused {
seconds = seconds + 1
print(currentTime)
}
}
.navigationViewStyle(.stack)
}
}
struct FirstView: View {
@Binding var timerSeconds : Int
@Binding var timerPaused : Bool
var body: some View {
VStack {
Text("First View")
Text("\(timerSeconds)")
Button(action: {
timerPaused.toggle()
}) {
Image(systemName: timerPaused ? "play.fill" : "stop.fill")
}
NavigationLink(destination: SecondView(seconds: $timerSeconds)) {
Text("Navigate 2")
}
}
}
}
struct SecondView: View {
@Binding var seconds : Int
var body: some View {
Text("\(seconds)")
}
}
Any help will be welcome!! Thanks a lot
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
