SwiftUI 点击按钮手动触发TextField提交事件的实现方法
SwiftUI手动触发TextField提交的实现方案
方案1:抽离公共逻辑(全版本兼容,优先推荐)
把onCommit的执行逻辑单独封装为公共方法,按钮点击时直接调用即可,无需依赖系统特性,逻辑最清晰:
// 抽离提交逻辑为单独方法 func handleCommit() { print("Commit") // 原有onCommit的所有逻辑都迁移到此处 } // 调用部分 TextField("", text: $searchText, onCommit: handleCommit) Button(action: { searchText = "test" handleCommit() // 直接执行提交逻辑 }) { Text("Search test") }
方案2:通过焦点状态触发提交(iOS 15+ 适用)
如果需要模拟用户输入完成后失焦提交的交互,可以用@FocusState控制TextField的焦点,失去焦点时系统会自动触发onCommit回调:
@FocusState private var isSearchFieldFocused: Bool // 视图部分 TextField("", text: $searchText, onCommit: { print("Commit") }) .focused($isSearchFieldFocused) Button(action: { searchText = "test" isSearchFieldFocused = false // TextField失焦自动触发onCommit }) { Text("Search test") }
方案3:使用submitTrigger主动触发(iOS 17+ 适用)
iOS 17新增了提交触发修饰符,无需改动原有提交逻辑,直接触发即可:
@State private var submitTrigger = false // 视图部分 TextField("", text: $searchText) .onSubmit { print("Commit") } .submitTriggers(.submit, when: submitTrigger) Button(action: { searchText = "test" submitTrigger.toggle() // 主动触发提交动作 }) { Text("Search test") }
内容的提问来源于stack exchange,提问作者Underthestars-zhy
相关产品推荐
相关产品推荐

