我想在NavigationStack中从View PathD转到PathB,而不创建PathB的新对象,也不删除导航堆栈层次结构中的PathC的视图实例。
详细信息:
@State var path: [String] = []
// or this can also be written
//@State var path: NavigationPath = NavigationPath()
var body: some View {
NavigationStack(path: $path) {
ZStack{
Text("SomeThing")
}
.navigationDestination(for: String.self, destination: { path in
switch path {
case "pathA" :
PathA().navigationBarBackButtonHidden()
case "pathB":
PathB().navigationBarBackButtonHidden()
case "pathC":
PathC().navigationBarBackButtonHidden()
default:
PathD().navigationBarBackButtonHidden()
}
})
这里我尝试的是在一些视图中进行导航时匹配参考名称
path.append("pathA")
现在考虑我在视图PathD((中。我想导航回PathB。一个选项是四处滑动,但我禁用了导航后退按钮。
所以我做的是
来自PathD
path.append("pathB")
这将创建一个新的PathB((视图,而不是返回到我现有的视图。
现在我的要求是回到我创建的PathB((,而不是一个新对象。
如果我的解释不充分,请随时发表评论
我会做一些类似的事情:
var newPath = Array(path.prefix(while: {$0 != "pathB"}))
newPath.append("pathB")
path = newPath
给定path = ["pathA","pathB","pathC","pathD"]
这应将path
设置为["pathA", "pathB"]
在iOS中<16.0您可以使用PresentationMode来取消当前视图并返回到以前的视图;导航回":
// Auto-injected environment variable (no need to manually .environment it)
@Environment(.presentationMode) var mode: Binding<PresentationMode>
func navigateBack() { mode.wrappedValue.dismiss() }
对于iOS 16以后的版本,它已被isPresented和disse所取代。后者可用于等效的";导航返回";。
private struct SheetContents: View {
@Environment(.dismiss) private var dismiss
var body: some View {
Button("Go to Previous View") {
dismiss()
}
}
}
我在这里为新的导航系统编写了一些辅助函数,您可能会发现这些函数很有用。