如何导航到NavigationView内部的任何视图

问题描述

我有这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上的标记和选择。

它们是使导航过渡转到特定页面的更简单解决方案,并且如果该视图在当前视图执行向后过渡之前是某个视图?

解决方法

一个基本的解决方法是添加@Binding并将其传递。检查出现的绑定索引。直到它不是索引presentation.wrappedValue.dismiss。一种更复杂的方法是添加一个处理所有导航逻辑的Navigator类。

,

更简单的解决方案是按如下方式修改您的第三个视图:

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")
    }
}