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

SwiftUI保存用户资料数据及导航跳转失效问题求助

问题解决:姓名输入、导航跳转及保存失效问题

一、修复NavigationLink警告与跳转失效问题

旧的NavigationLink(isActive:)在iOS 16+已被弃用,改用NavigationStack结合navigationDestination是正确方向,调整方式如下:

  1. 先定义导航路径状态变量:
@State private var navigationPath = NavigationPath()
  1. 用NavigationStack包裹页面全部内容,替换原隐藏的NavigationLink:
NavigationStack(path: $navigationPath) {
    // 你的页面内容(包含姓名输入框、Done按钮等)
    Button(action: {
        saveName()
        navigationPath.append("Profile") // 通过路径跳转触发页面切换
    }) {
        Image("done").resizable().aspectRatio(contentMode: .fit)
            .frame(width: 103, height: 103)
            .padding(.leading,259)
            .padding(.bottom,740)
    }
    // 配置导航目标
    .navigationDestination(for: String.self) { value in
        if value == "Profile" {
            Profile()
        }
    }
}

二、解决姓名无法保存的问题

核心要确保输入框和profilename是双向绑定状态:

  • 先给profilename添加状态包装,同时从UserDefaults初始化:
@State private var profilename = UserDefaults.standard.string(forKey: "User_Name") ?? ""
  • 输入框必须绑定这个变量:
TextField("请输入姓名", text: $profilename)
  • 可以在saveName()里加打印验证,确认内容已被捕获:
private func saveName() {
    print("当前要保存的姓名:\(profilename)")
    UserDefaults.standard.set(profilename, forKey: "User_Name")
}

如果profilename没有用@State/@Binding修饰,输入的内容根本无法被保存方法获取。

三、解决fullScreenCover点击输入框触发跳转的问题

这个问题是状态变量donetapped被意外触发导致的,检查以下两点:

  1. 确保只有点击Done按钮时才修改donetapped:
@State private var donetapped = false

Button(action: {
    saveName()
    donetapped = true
}) {
    // Done按钮样式
}
.fullScreenCover(isPresented: $donetapped) {
    Profile()
}
  1. 检查姓名输入框的代码,有没有额外的手势或绑定逻辑不小心修改了donetapped变量,比如误加了onTapGesture触发跳转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:30:17