如何在SWIFTUI中从NavigationStack访问对象?我使用的是iOS 16 NavigationStack



我想在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()
}
}
}

我在这里为新的导航系统编写了一些辅助函数,您可能会发现这些函数很有用。

相关内容

  • 没有找到相关文章

最新更新