我正在尝试在文本字段中键入时更改文本的值。当我在文本字段中键入任何内容时,我想使用文本字段值进行一些计算并将其显示在文本上。在 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))
}
}
}