ios - 将数据从枚举传递到在 ForEach 循环内触发的工作表
问题描述
我的 VStack 中有一个 ForEach 循环,因此为我的枚举中的每个元素创建一个新的“单元格”。这工作得很好。我可以传递每个单元格的标题和编号,但在每个单元格中都有一个用于切换工作表视图的按钮。每个工作表都应在滚动视图中包含相应的文本。因此,该文本也在枚举中给出。
问题:但是当我尝试通过 element.infoText 为每个工作表传递该 infoText 时,会显示枚举中第一个元素的 infoText。
ForEach 循环:
struct ListView: View{
@State var infoSheetIsPresented: Bool = false
var body: some View{
VStack {
ForEach(WelcomeCardViewContent.allCases, id: \.self) {
element in
HStack {
Text(element.text)
Button(action: {
self.infoSheetIsPresented.toggle()
}) {
Image(systemName: "info.circle")
}
.sheet(isPresented: self.$infoSheetIsPresented) {
Text(element.infoText)
}
}
}
}
}
}
这是我的枚举。当然还有 InfoSheetView,但就像我说的,它基本上只是一个带有文本的滚动视图。文本通过一个简单的“文本”常量传递。为简单起见,我用简单的文本视图替换了单独的工作表视图 - >同样的问题。
enum WelcomeCardViewContent: String, CaseIterable{
case personalData
case bodyParameters
var text: String {
switch self{
case .personalData:
return "Personal Data"
case .bodyParameters:
return "Body Parameters"
}
}
var infoText: String {
switch self{
case .personalData:
return "1 Lorem ipsum dolor.."
case .bodyParameters:
return "2 Lorem ipsum dolor sit amet."
}
}
}
谢谢你的建议^^。
解决方案
由于您丢失了当前卡片的轨迹,因此我通过保存将要显示的卡片来解决此问题。现在文本显示正确。
这是固定版本:
struct ListView: View {
@State private var infoSheetIsPresented: Bool = false
@State private var showingCard: WelcomeCardViewContent = .personalData
var body: some View {
ForEach(WelcomeCardViewContent.allCases, id: \.self) { element in
HStack {
Text(element.text)
Button(action: {
self.showingCard = element
self.infoSheetIsPresented.toggle()
}) {
Image(systemName: "info.circle")
}
.sheet(isPresented: self.$infoSheetIsPresented) {
Text(self.showingCard.infoText)
}
}
}
}
}
推荐阅读
- android - 初学者 - Android Studio 中的 RelativeLayout 无法按预期工作
- javascript - 从给定数组中找到一对元素,其总和等于 JavaScript 中的特定目标数
- excel - 根据 Excel 表格中的两个值检索值
- python - 打乱数据行时 100% 的分类器准确度
- vue.js - Nuxt 加载进度条加载多次
- javascript - 使用 WebAuthn 时偶尔出现 NotSupportedError 异常
- r - R语言——读取excel中的值并检查
- javascript - 由 Intersection Observer 引起的 React 内存泄漏
- python - Django - 在一个页面上检索 2 个单独的查询集的数据
- java - Intellij 中的 Checkstyle 扫描期间出现异常