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

SwiftUI如何在视图间传递数据?iPad端点击左侧列表右侧视图不更新如何解决

问题解决方法

核心问题根源

  1. 点击按钮时新建的FeatureView2实例,和右侧已经渲染的FeatureView2不是同一个对象,修改新建实例没有任何作用
  2. title变量定义在FeatureView2的body内部,每次视图刷新时该变量都会被重置,无法持久保存状态
  3. 没有使用SwiftUI状态管理机制建立两个视图之间的数据关联

修正方案

第一步:修改FeatureView2,使用@Binding接收外部状态

struct FeatureView2: View {
    // 绑定父视图传入的状态
    @Binding var title: String
    
    var body: some View {
        ZStack {
            Text(title)
        }
    }
}

第二步:修改FeatureView1,持有共享状态并绑定到子视图

struct FeatureView1 : View {
    // 用@State持有需要共享的可变状态
    @State private var feature2Title = "初始标题"
    
    var body: some View {
        HStack {
            List(item) { items in
                Button("Click to update title in Feature View 2") {
                    // 仅修改状态值即可,SwiftUI会自动更新关联视图
                    feature2Title = "Button Called"
                }
            }
            // 把状态绑定到右侧的FeatureView2
            FeatureView2(title: $feature2Title)
        }
    }
}

注意事项

  • 所有需要驱动视图更新的可变状态,必须使用SwiftUI提供的@State、@Binding、@ObservedObject等包装器修饰
  • 不要在body方法内部定义存储属性,body是计算属性,每次刷新都会重新执行内部代码,定义的变量不会持久保存
  • 同层级视图间的数据传递,由共同的父视图持有状态,子视图通过@Binding关联该状态即可实现联动更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:54:04