我有一个导航视图,其中包括内容视图和一个TimerView...TimerView有一个计时器,它可以正确地递增,也可以在我调用时正确停止。self.timer.upstream.connect().cancel().
然而,当我返回到ContentView,然后再次导航到TimerView时,我希望计时器再次开始计数,但是这种情况不会发生。secondsElapsed会重置为0,但计时器不会运行。
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
NavigationLink(destination: TimerView()) {
Text("Go to Timer View")
}
}
}
}
struct TimerView: View {
@State var secondsElapsed = 0
var timer = Timer.publish (every: 1, on: .main, in: .common).autoconnect()
var body: some View {
VStack {
Text("\(self.secondsElapsed) seconds elapsed")
Button("Stop timer",
action: {
self.timer.upstream.connect().cancel()
})
}.onReceive(timer) { _ in
self.secondsElapsed += 1
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
尝试在viewDidampar()中调用您的计时器。
如果您不熟悉viewDidampar(),请检查以下内容https://developer.apple.com/documentation/uikit/uiviewcontroller/1621423-viewdidappear
无论何时在视图控制器上来回切换,该函数都将被触发。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。