Ios 在一次键入TextField时更改文本的值,而无需单击任意位置-SwiftUI

Ios 在一次键入TextField时更改文本的值,而无需单击任意位置-SwiftUI,ios,textfield,swiftui,Ios,Textfield,Swiftui,我试图在键入文本字段时更改文本的值。当我在TextField中键入任何内容时,我想用TextField值进行一些计算,并在文本中显示它。在Swift中,我们有func textField didchange(\utextfield:UITextField)UITextField的委托方法来跟踪UITextField的更改。 在SwiftUI中,我尝试使用onEditingChanged创建文本字段。但不知何故,它不会进入那个街区。我不知道我是否做错了什么 @State var total

我试图在键入文本字段时更改文本的值。当我在TextField中键入任何内容时,我想用TextField值进行一些计算,并在文本中显示它。在Swift中,我们有
func textField didchange(\utextfield:UITextField)
UITextField的委托方法来跟踪UITextField的更改。

在SwiftUI中,我尝试使用
onEditingChanged
创建文本字段。但不知何故,它不会进入那个街区。我不知道我是否做错了什么

    @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不像可可。它不是事件驱动的,并且没有从一个接口对象到另一个接口对象的通信。只有数据。数据通过状态变量流动。它通过状态变量的绑定向上流动,通过状态变量的值向下流动


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

当$totalAmount绑定更改时,
onEditingChanged
不会触发。当视图进入编辑模式时,它将激发。SwiftUI中没有与
textFieldDidChange
等效的功能,但是有一些方法可以使用自定义绑定对文本更改进行操作(我现在找不到SO答案,但有一个)。我知道onEditingChanged不起作用。但这就是我尝试过的。你在说这个吗?我知道一个编辑改变是行不通的,但我也试过了。我也在做同样的事情,但我是通过ContentView中的一个函数来计算值的。当我访问该函数时,xcode会在其他地方显示错误,并且代码工作正常。不管怎样,它现在工作得很好!非常感谢你!!