我知道如何使用@Environment(\.presentationMode) var presentationMode / self.presentationMode.wrappedValue.dismiss()
来关闭子视图中的模态窗口,但这是一个不同的问题。
当您在模态窗口中呈现多页NavigationView
并浏览了几页后,对presentationMode
的引用会更改为NavigationView,因此使用self.presentationMode.wrappedValue.dismiss()
仅会弹出最后一个NavigationView而不是关闭包含的模态窗口。
是否有可能 - 如果可能的话,如何 - 从NavigationView树中的页面关闭包含的模态窗口?
以下是一个简单的示例,显示了此问题。如果您使用SwiftUI创建Xcode单个视图应用程序项目并将默认的ContentView
代码替换为此代码,则无需进行其他更改即可正常工作。
import SwiftUI
struct ContentView: View {
@State var showModal: Bool = false
var body: some View {
Button(action: {
self.showModal.toggle()
}) {
Text("Launch Modal")
}
.sheet(isPresented: self.$showModal, onDismiss: {
self.showModal = false
}) {
PageOneContent()
}
}
}
struct PageOneContent: View {
var body: some View {
NavigationView {
VStack {
Text("I am Page One")
}
.navigationBarTitle("Page One")
.navigationBarItems(
trailing: NavigationLink(destination: PageTwoContent()) {
Text("Next")
})
}
}
}
struct PageTwoContent: View {
@Environment (\.presentationMode) var presentationMode
var body: some View {
NavigationView {
VStack {
Text("This should dismiss the modal. But it just pops the NavigationView")
.padding()
Button(action: {
// How to dismiss parent modal here instead
self.presentationMode.wrappedValue.dismiss()
}) {
Text("Finish")
}
.padding()
.foregroundColor(.white)
.background(Color.blue)
}
.navigationBarTitle("Page Two")
}
}
}
UIKit-3900.12.15/UINavigationController.m:8129
中遇到了异常错误:CRASH: Tried to pop to a view controller that doesn't exist.
你也是吗? - Asperi