我在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."
}
}
}
感谢您的建议^^。
答案 0 :(得分:0)
由于您丢失了当前卡的信息,因此我通过保存将要显示的卡来解决此问题。现在,文本可以正确显示。
这是固定版本:
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)
}
}
}
}
}