Swiftui:如何始终观察变量绑定到文本字段

时间:2020-02-21 07:25:12

标签: swift swiftui

我正在使用Swift-UI创建我的应用程序。 AccountView列出了用户的属性,您可以对其进行更新。

单击列表的用户变量行上的Update按钮后,导航至EditVariableView,您可以在其中使用Text Field更改变量。

当然,该文本字段具有对输入文本的验证,您可以通过Submit右上角的EditVariableView按钮来提交更改。

为了验证输入,我使用onCommit来检测输入的更改,但这是一个问题。

当您触摸文本字段时,键盘会弹出,您也可以输入文本。但是onCommit仅在您关闭键盘时才会发出事件。

如果您输入文本并在不关闭键盘的情况下单击Submit按钮,则肯定onCommit不会发出验证事件。因此,当然不会进行验证。

我想让你告诉我,如何在每次文本更改时检测输入更改。

3 个答案:

答案 0 :(得分:2)

如果TextField处于编辑状态,则可以禁用“提交”按钮

aws apigateway update-usage-plan --usage-plan-id abc123 --patch-operations op="add",path="/productCode",value="s5a8d5kqgg8ymke2yjxx"

答案 1 :(得分:0)

SwiftUI 2.0

在Xcode 12和iOS 14,macOS 11或任何其他包含SwiftUI 2.0的操作系统中,有一个名为'onChange'的新修饰符可以检测给定state的任何更改,并且可以在任何视图。因此,进行一些小的重构:

struct ContentView: View {
    @State var txt: String = ""
    @State var editingFlag = false

    var body: some View {
        VStack {
            TextField("text", text: $txt)
                .onChange(of: txt) {
                    print("Changed to :\($0)")
                }
        }
        .padding()
        .border(Color.red)

        Button("SUBMIT") {
            print("submit")
        }
        .disabled(editingFlag)
    }
}

答案 2 :(得分:0)

来自:用Swift进行黑客攻击。保罗·哈德森

struct ContentView : View {
    @State private var name = ""

    var body: some View {
        TextField("Enter your name:", text: $name)
            .textFieldStyle(RoundedBorderTextFieldStyle())
            .onChange(of: name) { newValue in
                print("Name changed to \(name)!")
            }
    }
}