我使用 Xcode 12.2 和 iOS 构建目标 14.1。\n我的 SwiftUI 应用程序存在问题,无法依次关闭使用 NavigationLink 的视图。
\n当我第一次导航到 View4,单击“关闭”,然后在 View3 上再次单击“关闭”时,以下 Swift 源代码会出现问题。单击后一个按钮不会导致任何操作。要让 View3 的“关闭”按钮再次工作,我必须使用“后退”按钮转到 View2,然后切换回 View3。
\n我之前尝试过使用presentationMode.wrappedValue.dismiss(),但是对于较少的视图来说这不起作用。
最小可重复示例:
\nstruct View1: View {\n @State var presentView2: Bool = false\n \n var body: some View {\n NavigationView {\n List {\n NavigationLink(\n destination: View2(types: ["Exams"], presentView2: $presentView2),\n isActive: $presentView2,\n label: {\n Text("View2")\n })\n }.listStyle(InsetGroupedListStyle())\n .navigationTitle("View1")\n }\n }\n}\nstruct View2: View {\n var types: [String]\n @State var presentView3: Bool = false\n @Binding var presentView2: Bool\n \n var body: some View {\n List {\n Section {\n NavigationLink("View3", destination: View3(presentView3: $presentView3), isActive: $presentView3)\n }\n \n Section {\n Button(action: {self.presentView2 = false}, label: {\n Text("Dismiss")\n })\n }\n }\n .listStyle(InsetGroupedListStyle())\n .navigationTitle(LocalizedStringKey("View2"))\n }\n}\nstruct View3: View {\n @Binding var presentView3: Bool\n @State var presentView4: Bool = false\n @State\n var isAddViewPresented: Bool = false\n var body: some View {\n List {\n Section {\n NavigationLink("View4", destination: View4(presentView4: $presentView4), isActive: $presentView4)\n }\n \n Button(action: {presentView3 = false}, label: {\n Text("Dismiss")\n })\n }\n .listStyle(InsetGroupedListStyle())\n .navigationTitle("View3")\n .toolbar {\n ToolbarItem {\n Button(action: {isAddViewPresented.toggle()}, label: {\n Label("Add", systemImage: "plus.circle.fill")\n })\n }\n }\n .sheet(isPresented: $isAddViewPresented, content: {\n Text("DestinationDummyView")\n })\n }\n}\nstruct View4: View {\n @Binding var presentView4: Bool\n \n var body: some View {\n List {\n Button(action: {presentView4 = false}, label: {\n Text("Dismiss")\n })\n }\n .listStyle(InsetGroupedListStyle())\n .navigationTitle("View4")\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n有人有解决方案吗?\n具体来说,我需要在我的应用程序中使用它来从应用程序中删除记录(首先是孩子,然后是父母)。\n感谢您的任何反馈和意见!\xe2\x98\xba\xef\xb8\x8f\xe2\x98\xba\xef\xb8\x8f\xe2\x98\xba\xef\xb8\x8f
\n添加到您的视图中的.isDetailLink(false)每个...并且所有工作都有效。NavigationLink
NavigationLink(
destination: View2(types: ["Exams"], presentView2: $presentView2),
isActive: $presentView2,
label: {
Text("View2")
}).isDetailLink(false)
...
NavigationLink("View3", destination: View3(presentView3: $presentView3), isActive: $presentView3)
.isDetailLink(false)
...
NavigationLink("View4", destination: View4(presentView4: $presentView4), isActive: $presentView4)
.isDetailLink(false)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2791 次 |
| 最近记录: |