Timer 如何在swiftUI中自动更新TextField
我是一个新的快速开发人员,我有一个小问题。我用定时器做了一个函数来创建一个计数定时器。我想在一个文本字段中显示时间更新,但它不起作用(使用文本它起作用)。代码如下:Timer 如何在swiftUI中自动更新TextField,timer,swiftui,textfield,Timer,Swiftui,Textfield,我是一个新的快速开发人员,我有一个小问题。我用定时器做了一个函数来创建一个计数定时器。我想在一个文本字段中显示时间更新,但它不起作用(使用文本它起作用)。代码如下: import SwiftUI struct ContentView: View { @State var min: Int = 0 @State var sec: Int = 0 @State var time = "" @State var timer: Timer? =
import SwiftUI
struct ContentView: View {
@State var min: Int = 0
@State var sec: Int = 0
@State var time = ""
@State var timer: Timer? = nil
var body: some View {
NavigationView{
VStack{
TextField("Tempo (min o mm:ss)", text: $time)
HStack{
Button(action: {
self.start()
self.time = String(self.min)+":"+String(self.sec)
}){
Text("Start")
}
Button(action: {
self.stop()
}){
Text("Stop")
}
}
}//VStack
}//NavigationView
}//body
func start(){
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true){
temp in
self.sec = self.sec + 1
if(self.sec == 59){
self.sec = 0
self.min = self.min + 1
}
}
}
func stop(){
timer?.invalidate()
timer = nil
}
}//contetView
您没有看到更改,因为您没有更新计时器循环中的
time
字符串
以下是修复方法:
func updateTimeString() {
self.time = String(format: "%02d:%02d", self.min, self.sec)
}
func start(){
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { temp in
self.sec = self.sec + 1
if self.sec == 59 {
self.sec = 0
self.min = self.min + 1
}
updateTimeString()
}
}
注意事项:
- 我移动了代码,将
字符串设置为一个单独的函数。然后,您也可以通过时间
按钮调用此功能
- 我使用
将格式添加到字符串中,以显示分和秒的两位数字String(format:)