如何导航到 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)之解决

如何使用菜单布局将自定义项添加到 NavigationView?

如何将页脚添加到 NavigationView - Android 支持设计库?