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

时间:2020-09-28 00:40:41

标签: swift swiftui swiftui-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上的标记和选择。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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