SwiftUI 当用户提交 TextField 时如何执行事件?

Updated for Xcode 13.0 New in iOS 15

SwiftUI 有一个 onSubmit() 修饰符,可以附加到层次结构中的任何视图,并在用户完成将文本输入到 TextFieldSecureField 时运行您选择的函数。

例如,我们可以要求用户输入他们的密码,然后在他们按下回车键时运行一些代码:

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

  var body: some View {
    if #available(iOS 15.0, *) {
      SecureField("Password", text: $password)
        .onSubmit {
            print("Authenticating…")
        }
    } else {
        // Fallback on earlier versions
    }
  }
}

对于这样的简单示例,TextFieldSecureField 都接受专用的 onCommit 参数,我们可以在其中直接将我们的函数附加到它们。 但是,使用 onSubmit() 的优势在于它可以捕获在其上下文中提交的所有文本值,这使得填写表单更加容易:

struct ContentView: View {
  @State private var username = ""
  @State private var password = ""

  var body: some View {
    Form {
      TextField("Username", text: $username)
      SecureField("Password", text: $password)
    }
    .onSubmit {
      guard username.isEmpty == false && password.isEmpty == false else { return }
      print("Authenticating…")
    }
  }
}