SwiftUI编程式导航触发表单验证弹窗后再次提交无响应问题求助
问题原因与修复方案
核心问题定位
你的代码里存在3个直接导致异常的逻辑错误:
- 校验逻辑未提前重置状态,第一次触发校验失败后,
lineupIsReady可能已经被置为true,后续补全内容后再赋值相同的true,SwiftUI检测不到状态变化,不会触发导航 - 遍历校验的逻辑顺序错误:只要遍历到非空字段就立即把
lineupIsReady设为true,哪怕后续存在空字段,会出现lineupIsReady和textFieldsInvalid同时为true的状态冲突 - 未在遇到空字段后终止遍历,无意义的循环执行不会改变最终结果
修复方法
只需要替换NavigationLink的onTapGesture里的校验逻辑即可,修复后代码如下:
.onTapGesture { // 点击后先重置两个状态,清除旧值干扰 self.textFieldsInvalid = false self.lineupIsReady = false // 遍历所有字段,只要有一个为空就标记校验失败 for name in checkIfFieldsValid { if name.isEmpty { self.textFieldsInvalid = true break // 找到空字段直接终止遍历,提升效率 } } // 所有字段都不为空才允许跳转 if !textFieldsInvalid { self.lineupIsReady = true } }
额外优化说明
你后续如果需要从跳转的页面返回后再次提交表单,不需要额外修改状态,系统会在你返回上一级页面时自动把lineupIsReady重置为false,符合重复提交的使用需求。
内容的提问来源于stack exchange,提问作者Manny M.
相关产品推荐
相关产品推荐

