在不单击任何地方的情况下一次在 TextField 中键入时更改文本的值 - SwiftUI

Change value of Text while typing in TextField at a time without clicking anywhere - SwiftUI

我正在尝试在 TextField 中键入时更改 Text 的值。当我在 TextField 中键入任何内容时,我想对 Textfield 值进行一些计算并将其显示在 Text 上。在 Swift 中,我们有 UITextField 的 func textFieldDidChange(_ textField: 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。它不是事件驱动的,并且没有从一个接口对象到另一个接口对象的通信。只有数据。数据流经 状态变量 。它按状态变量的 binding 向上 流动,按状态变量的 value 向下 流动.

因此您不需要 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))
        }
    }
}