【发布时间】:2020-11-22 19:21:04
【问题描述】:
我使用 Xcode 12.2 和 iOS 构建目标 14.1。 我的 SwiftUI 应用程序存在一个问题,即一个接一个地关闭使用 NavigationLink 的视图不起作用。
当我第一次导航到 View4 时,以下 Swift 源代码出现问题,单击“Dismiss”,然后在 View3 上再次单击“Dismiss”。后一个按钮单击不会导致任何操作。要让 View3 的“关闭”按钮再次工作,我必须使用返回按钮转到 View2,然后切换回 View3。
我之前尝试过使用presentationMode.wrappedValue.dismiss(),但是对于较少的视图,这不起作用。
最小可重现示例:
struct View1: View {
@State var presentView2: Bool = false
var body: some View {
NavigationView {
List {
NavigationLink(
destination: View2(types: ["Exams"], presentView2: $presentView2),
isActive: $presentView2,
label: {
Text("View2")
})
}.listStyle(InsetGroupedListStyle())
.navigationTitle("View1")
}
}
}
struct View2: View {
var types: [String]
@State var presentView3: Bool = false
@Binding var presentView2: Bool
var body: some View {
List {
Section {
NavigationLink("View3", destination: View3(presentView3: $presentView3), isActive: $presentView3)
}
Section {
Button(action: {self.presentView2 = false}, label: {
Text("Dismiss")
})
}
}
.listStyle(InsetGroupedListStyle())
.navigationTitle(LocalizedStringKey("View2"))
}
}
struct View3: View {
@Binding var presentView3: Bool
@State var presentView4: Bool = false
@State
var isAddViewPresented: Bool = false
var body: some View {
List {
Section {
NavigationLink("View4", destination: View4(presentView4: $presentView4), isActive: $presentView4)
}
Button(action: {presentView3 = false}, label: {
Text("Dismiss")
})
}
.listStyle(InsetGroupedListStyle())
.navigationTitle("View3")
.toolbar {
ToolbarItem {
Button(action: {isAddViewPresented.toggle()}, label: {
Label("Add", systemImage: "plus.circle.fill")
})
}
}
.sheet(isPresented: $isAddViewPresented, content: {
Text("DestinationDummyView")
})
}
}
struct View4: View {
@Binding var presentView4: Bool
var body: some View {
List {
Button(action: {presentView4 = false}, label: {
Text("Dismiss")
})
}
.listStyle(InsetGroupedListStyle())
.navigationTitle("View4")
}
}
有人对此有解决方案吗? 具体来说,我需要在我的应用程序中删除应用程序中的记录(首先是子项,然后是父项)。 感谢您的任何反馈和意见! ☺️☺️☺️
【问题讨论】: