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
相关产品推荐
相关产品推荐

