Swiftui “驳回迅捷模式”;“工作表”;从列表中
我试图在列表中呈现一个模态。Beta中的Modals已经改变了很多次,但我相信我使用的是正确的/最新的方式(从Xcode Beta 7开始)。但是,当我从列表中触发模式时,对于每个列表项,它会打开一次,但不会再打开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:
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我必须回复你——我已经在这上面做了一个完整的应用程序,但是把真正的代码减少到可共享的代码却奇怪地犯了同样的错误