SwiftUI提交修饰符onSubmit
SwiftUI提交修饰符onSubmit

SwiftUI提交修饰符onSubmit

在 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() 配合,可以显著优化用户体验。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注