SwiftUI 通过导航视图中的视图共享计时器
SwiftUI sharing timer through views in navigation view
我是 SwiftUI 的新手。
我想制作一个应用程序,在导航视图中浏览不同的视图,并在后台 运行 计时器显示每个视图的时间。
问题是当我导航到二级导航时。当计时器打开时,应用程序 returns 自动返回到上一个导航视图。
这是我的意思的屏幕截图视频:
https://youtu.be/eXbK9jpluvk
这是我的代码:
导入 SwiftUI
结构内容视图:视图{
@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)
}
}
构造 FirstView:视图 {
@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")
}
}
}
}
构造 SecondView:视图 {
@Binding var seconds : Int
var body: some View {
Text("\(seconds)")
}
}
欢迎任何帮助!!
非常感谢
NavigationView
只能推送一个细节NavigationLink
所以要有更多的层次你需要在导航上设置.isDetailLink(false)
on the link. Alternatively, if you don't expect to run in landscape split view, you could set .navigationViewStyle(.stack)
。
我是 SwiftUI 的新手。 我想制作一个应用程序,在导航视图中浏览不同的视图,并在后台 运行 计时器显示每个视图的时间。 问题是当我导航到二级导航时。当计时器打开时,应用程序 returns 自动返回到上一个导航视图。 这是我的意思的屏幕截图视频: https://youtu.be/eXbK9jpluvk
这是我的代码:
导入 SwiftUI
结构内容视图:视图{
@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)
}
}
构造 FirstView:视图 {
@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")
}
}
}
}
构造 SecondView:视图 {
@Binding var seconds : Int
var body: some View {
Text("\(seconds)")
}
}
欢迎任何帮助!! 非常感谢
NavigationView
只能推送一个细节NavigationLink
所以要有更多的层次你需要在导航上设置.isDetailLink(false)
on the link. Alternatively, if you don't expect to run in landscape split view, you could set .navigationViewStyle(.stack)
。