将数据从枚举传递到在ForEach循环中触发的sheet中。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将数据从枚举传递到在ForEach循环中触发的sheet中。相关的知识,希望对你有一定的参考价值。

我在我的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)
                }
            }
        }
    }
}

以上是关于将数据从枚举传递到在ForEach循环中触发的sheet中。的主要内容,如果未能解决你的问题,请参考以下文章

NULL值在foreach循环R中作为符号地址错误传递

传递给控制器​​时,foreach 循环中内置的模型为空

codeigniter 将数据从视图传递到模型并检索信息

在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML

PHP - 提交日期/时间/从foreach循环中选择输入值到$ _POST不返回任何内容

Parallel.ForEach 具有可枚举的 KeyValuePairs?