以编程方式一个接一个地关闭 SwiftUI 视图不起作用
Posted
技术标签:
【中文标题】以编程方式一个接一个地关闭 SwiftUI 视图不起作用【英文标题】:Dismiss of SwiftUI Views one after the other programmatically does not work 【发布时间】: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")
有人对此有解决方案吗? 具体来说,我需要在我的应用程序中删除应用程序中的记录(首先是子项,然后是父项)。 感谢您的任何反馈和意见! ☺️☺️☺️
【问题讨论】:
【参考方案1】:将.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)
【讨论】:
以上是关于以编程方式一个接一个地关闭 SwiftUI 视图不起作用的主要内容,如果未能解决你的问题,请参考以下文章