You need to enable JavaScript to run this app. SwiftUI编程式导航触发表单验证弹窗后再次提交无响应问题求助
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 05:21:03