在 TextField 中键入时更改文本的值,而无需单击任何位置 - SwiftUI



我正在尝试在文本字段中键入时更改文本的值。当我在文本字段中键入任何内容时,我想使用文本字段值进行一些计算并将其显示在文本上。在 Swift 中,我们有func textFieldDidChange(_ textField: UITextField)UITextField 的委托方法来跟踪 UITextField 的更改。

在 SwiftUI 中,我尝试使用onEditingChanged创建 TextField,但不知何故,它没有进入那个块。我不知道我是否做错了什么。

@State var totalAmount: String = ""
@State var addAmount: String = ""
var body: some View {
HStack {
TextField("0.0", text: $totalAmount, onEditingChanged: { _ in
self.addAmount = //doing some calculation with totalAmount
})
Text(self.addAmount)
}
}

谁能帮忙?

SwiftUI 不像 Cocoa。它不是事件驱动的,并且没有从一个接口对象到另一个接口对象的通信。只有数据。数据流经状态变量。它按状态变量的绑定向上流动,按状态变量的值向动。

因此,您不需要onEditingChanged事件或任何其他事件。$totalAmount是一种绑定。当文本字段的文本更改时,它会自动更改。

此外,totalAmount是一个状态变量。如果文本直接或间接使用此值作为其值,则文本会在totalAmount更改时自动更改。

因此,只需使用依赖于totalAmount的计算变量,并将其作为文本的值,您就完成了。

非常基本的例子:

struct ContentView : View {
@State var totalAmount = ""
let addAmount = 10.0 // or whatever
var calc : Double { (Double(totalAmount) ?? 0.0) + addAmount } // or whatever
var body: some View {
HStack {
TextField("Type a number", text: $totalAmount)
.textFieldStyle(RoundedBorderTextFieldStyle())
.frame(width:100)
Text(String(self.calc))
}
}
}

最新更新