我在我的VStack里有一个ForEach循环,这样我的枚举中的每一个元素都会创建一个新的 “cell”。这样做就很好。我可以为每个单元格传递标题和数字,但是在每个单元格中都有一个按钮,它可以切换一个工作表视图。每个工作表应该在滚动视图中包含相应的文本。因此,文本也在枚举中给出。
问题:但是当我试图通过元素.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,但就像我说的,它基本上只是一个带有文本的滚动视图。文本通过一个简单的 “text “常量来传递。为了简单起见,我用一个简单的文本视图替换了单独的表视图-> 同样的问题。
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)
}
}
}
}
}
本文来自投稿,不代表运维实战侠立场,如若转载,请注明出处:https://www.shizhanxia.com/243.html