如何导航到 NavigationView 内的任何视图
Posted
技术标签:
【中文标题】如何导航到 NavigationView 内的任何视图【英文标题】:How to navigate to any view inside of a NavigationView 【发布时间】:2020-09-28 00:40:41 【问题描述】:我有这 3 个不同的视图,它们都通过 NavigationView
相互连接。我正在尝试找到一种方法来导航到 NavigationView
中较早的页面,但我希望过渡看起来像是在倒退。
struct Testing: View
var body: some View
NavigationView
VStack
NavigationLink(destination:testing2()) Text("Go to two")
.navigationBarTitle("Navigation")
struct testing2 : View
var body: some View
VStack
NavigationLink(destination: testing3()) Text("Go to third")
.navigationBarTitle("Second Page")
struct testing3 : View
var body: some View
VStack
Text("Go back to first")
.navigationBarTitle("Third Page")
我已经找到了一个解决方案,它结合使用可观察对象、环境变量以及NavigationLink
上的标签和选择。
他们是否是使导航转换转到特定页面的更简单的解决方案,如果它是在当前视图执行向后转换之前的视图?
【问题讨论】:
this question and answer 有一些很好的信息 我刚刚浏览了帖子,其中一个较新的答案与我所说的环境变量类似。所以我想我会坚持我的解决方案。 【参考方案1】:一个基本的解决方法是添加一个@Binding 并传递它。检查出现的绑定索引。如果它不是索引presentation.wrappedValue.dismiss,直到它是。更复杂的方法是添加一个处理所有导航逻辑的 Navigator 类。
【讨论】:
【参考方案2】:更简单的解决方案是将您的第三个视图修改如下:
struct testing3 : View
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
var body: some View
VStack
Button(action:
self.presentationMode.wrappedValue.dismiss()
self.presentationMode.wrappedValue.dismiss()
)
Text("Go back to first")
.navigationBarTitle("Third Page")
【讨论】:
这是否允许我导航到NavigationView
内部的任何视图,或者只是回到NavigationView
的顶层?
您可以转到任何父视图。取决于你写了多少次`self.presentationMode.wrappedValue.dismiss()`
我喜欢这个答案,但我将继续使用环境变量组合。当我在第 5 页到达第 2 页时,不必说 3 次关闭,我只需将环境变量设置为正确的标签。以上是关于如何导航到 NavigationView 内的任何视图的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 SwiftUI 中的 NavigationButton 的情况下导航到 NavigationView 中的另一个视图?
ios 13 SwiftUI向后导航时如何避免导航视图内的TabView应用崩溃
栏项中的导航链接返回到 NavigationView 的顶部
iOS 16.2 在 SwiftUI 子视图中无法关闭弹出的(sheet)导航视图(NavigationView)之解决