SwiftUI中PageTabView滑动切换时如何在ForEach单元格间传递数据
实现方案
你之前无法回传数据的核心原因是子单元格自行持有分数状态,没有和上层的全局数据源绑定,滑动页面切换子组件后状态就会重置,按照以下逻辑实现即可解决:
- 首先创建可观察状态管理器,负责存储全局分数数据:
定义符合ObservableObject协议的GameScoreViewModel,内部用@Published修饰存储所有球洞分数的数组、当前选中的球洞索引、标记游戏是否完成的布尔值。 - 上层
PlayTabView用@StateObject初始化上述视图模型,遍历生成球洞页面时,将对应下标位置的分数以@Binding的形式传入PlayPlayerCell组件。 - 子组件
PlayPlayerCell仅需要声明@Binding var currentHoleScore: Int属性,用户输入分数时直接修改该绑定值,改动会自动同步到上层的视图模型中,切换页面时数据不会丢失。 - 监听
PageTabView的selection属性变化,当选中索引等于最后一个球洞的下标,且对应分数已录入时,触发跳转逻辑,通过NavigationLink或者sheet将完整的分数数组传入记分板视图即可。

内容的提问来源于stack exchange,提问作者tonileipo
相关产品推荐
相关产品推荐

