一次在TextField中键入内容而无需单击任何位置即可更改Text的值-SwiftUI

Anj*_*iya 1 textfield ios swiftui

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

在SwiftUI中,我尝试使用创建TextField 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)

            }
    }
Run Code Online (Sandbox Code Playgroud)

有人能帮忙吗?

mat*_*att 6

SwiftUI不像可可。它不是事件驱动的,并且从一个接口对象到另一个接口对象之间没有通信。只有数据。数据流通过状态变量。它由状态变量的绑定向上流动,由状态变量的value 向下流动。

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

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

因此,只需使用一个取决于的计算变量,totalAmount并确定Text的值就可以完成。

最基本的例子:

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))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)