Swiftui “驳回迅捷模式”;“工作表”;从列表中

Swiftui “驳回迅捷模式”;“工作表”;从列表中,swiftui,Swiftui,我试图在列表中呈现一个模态。Beta中的Modals已经改变了很多次,但我相信我使用的是正确的/最新的方式(从Xcode Beta 7开始)。但是,当我从列表中触发模式时,对于每个列表项,它会打开一次,但不会再打开 import SwiftUI //This works perfectly fine struct BasicTest : View { struct SampleObject: Identifiable { var id = UUID() var name:

我试图在列表中呈现一个模态。Beta中的Modals已经改变了很多次,但我相信我使用的是正确的/最新的方式(从Xcode Beta 7开始)。但是,当我从列表中触发模式时,对于每个列表项,它会打开一次,但不会再打开

import SwiftUI

//This works perfectly fine

struct BasicTest : View {

struct SampleObject: Identifiable {
    var id = UUID()
    var name: String
}

let sampleObjects = [
        SampleObject(name: "Buffalo"),
        SampleObject(name: "Italy"),
        SampleObject(name: "Portland"),
    ]
@State private var showModal:Bool = false

var body: some View {

    Button(action: {
        print("Modal to open")
        self.showModal = true

    }) {
        Text("Show Modal")

    }.sheet(isPresented: self.$showModal)
        {
            TestDetailView(name: "Example")
        }
    }
}

#if DEBUG
struct BasicTest_Previews: PreviewProvider {
    static var previews: some View {
        BasicTest()
        }
}
#endif

//this one only opens once
struct ListTest : View {

    struct SampleObject: Identifiable {
        var id = UUID()
        var name: String
    }

    let sampleObjects = [
            SampleObject(name: "Buffalo"),
            SampleObject(name: "Italy"),
            SampleObject(name: "Portland"),
        ]
    @State private var showModal:Bool = false

    var body: some View {
            List {
                ForEach(sampleObjects) {
                    item in
                    Button(action: {
                        print("Modal to open")
                        self.showModal = true

                    }) {
                        Text("Show Modal for \(item.name)")

                    }.sheet(isPresented: self.$showModal)
                        {
                            TestDetailView(name: item.name)
                        }
                    }
                }
            }
        }

#if DEBUG
struct ListTest_Previews: PreviewProvider {
    static var previews: some View {
        ListTest()
        }
}
#endif

struct TestDetailView: View {

    @Environment(\.presentationMode) var presentationMode
    var name: String

    var body: some View {
        VStack {
            Button(action: {
                print("Button clicked")
                self.presentationMode.wrappedValue.dismiss()
                }) {
                    Image(systemName: "chevron.compact.down").font(Font.system(.largeTitle).bold())
                }
            Text(name)
        }
    }
}








我看不到任何错误消息,第二次打开时只是一个闪光。

如果为列表行和move.sheet()创建一个视图,它就会工作。

请看这里,您能进一步解释您的答案吗?我通过将工作表移到列表之外来实现这一点,这有一个缺点,就是使按钮代码复杂化(在我的实际代码中,不是在这个示例中,按钮位于名为row的子视图中)。如果我能保持这个状态那就太好了,我的解决方案很快就变得一团糟,因为我现在在列表和子视图之间来回传递数据。这篇博文的分支帮助@colinhooten我必须回复你——我已经在这上面做了一个完整的应用程序,但是把真正的代码减少到可共享的代码却奇怪地犯了同样的错误