You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI:如何触发onSubmit修饰符?解决decimalPad提交问题

解决decimalPad无返回键,添加键盘工具栏提交按钮并触发TextField提交逻辑的方法

方案一:抽离提交逻辑为独立函数(推荐)

把原本写在onSubmit里的代码单独封装成函数,这样系统触发的提交和手动按钮点击都能复用同一套逻辑,代码更清晰易维护,还能顺便添加收起键盘的操作:

struct ContentView: View {
    @State private var text: String = ""
    
    var body: some View {
        TextField("0", text: $text)
            .keyboardType(.decimalPad)
            .onSubmit(perform: submitAction)
            .toolbar {
                ToolbarItem(placement: .keyboard) {
                    Button("提交") {
                        submitAction()
                        // 点击提交后自动收起键盘
                        UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
                    }
                }
            }
    }
    
    // 独立的提交逻辑函数
    private func submitAction() {
        // 这里替换成你的实际操作,比如处理输入内容、发起网络请求等
        print("提交内容:\(text)")
    }
}

方案二:通过管理焦点触发onSubmit

如果不想抽离函数,可以用@FocusState管理TextField的焦点状态,点击按钮时让TextField失去焦点,从而自动触发onSubmit的逻辑:

struct ContentView: View {
    @State private var text: String = ""
    @FocusState private var isTextFieldFocused: Bool
    
    var body: some View {
        TextField("0", text: $text)
            .keyboardType(.decimalPad)
            .focused($isTextFieldFocused)
            .onSubmit {
                // 这里写你的提交操作
                print("提交内容:\(text)")
            }
            .toolbar {
                ToolbarItem(placement: .keyboard) {
                    Button("提交") {
                        isTextFieldFocused = false // 失去焦点触发onSubmit
                    }
                }
            }
    }
}

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:45:09