在 SwiftUI 中,onSubmit() 修饰符用于处理用户在完成文本输入时提交的动作,例如按下键盘上的 Return 键。onSubmit() 是 TextField 和其他支持提交行为的控件的修饰符。
基本用法
下面是 onSubmit() 的一个简单示例:
import SwiftUI
struct ContentView: View {
@State private var text: String = ""
var body: some View {
TextField("Enter your name", text: $text)
.textFieldStyle(.roundedBorder)
.padding()
.onSubmit {
print("User submitted: \(text)")
}
}
}
说明
1、触发条件:onSubmit 会在用户点击键盘上的 Return 键时触发。
2、适用控件:TextField 是常见控件,但其他支持提交行为的控件(如 Form 中的一些输入组件)也支持此修饰符。
用于带参数的 onSubmit
希望根据具体提交的值做出不同的响应时,可以使用更复杂的逻辑,例如绑定到特定字段的值。
struct ContentView: View {
@State private var username: String = ""
@State private var password: String = ""
var body: some View {
VStack {
TextField("Username", text: $username)
.textFieldStyle(.roundedBorder)
.onSubmit {
print("Username submitted: \(username)")
}
SecureField("Password", text: $password)
.textFieldStyle(.roundedBorder)
.onSubmit {
print("Password submitted: \(password)")
}
}
.padding()
}
}
点击Enter按钮,执行对应字段的onSubmit代码。
和 .submitLabel() 配合使用
可以通过 .submitLabel() 改变 Return 键的显示文本,从而影响用户体验。
import SwiftUI
struct ContentView: View {
@State private var text: String = ""
var body: some View {
TextField("Search", text: $text)
.textFieldStyle(.roundedBorder)
.padding()
.submitLabel(.search) // 改变 Return 键为“搜索”
.onSubmit {
print("Searching for: \(text)")
}
}
}
键盘上对应的按钮会被submitLabel改为对应的文本。
可用的 .submitLabel 值:
.continue、.done、.go、.join、.next、.return、.route、.search和.send。
与 Form 配合使用
在 Form 中,onSubmit 修饰符可以用于自动处理多行输入的提交。
struct ContentView: View {
@State private var email: String = ""
@State private var name: String = ""
var body: some View {
Form {
TextField("Email", text: $email)
.submitLabel(.next)
.onSubmit {
print("Email submitted: \(email)")
}
TextField("Name", text: $name)
.submitLabel(.done)
.onSubmit {
print("Name submitted: \(name)")
}
}
}
}
总结
onSubmit 是处理文本输入完成事件的主要方式。
它支持简化用户交互,无需借助代理类或额外逻辑。
与 .submitLabel() 配合,可以显著优化用户体验。