0

我有这 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.

他们是使导航转换转到特定页面的更简单的解决方案吗?如果它是在当前视图执行向后转换之前的视图?

4

2 回答 2

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")
    }
}
于 2020-09-28T12:00:03.523 回答
0

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

于 2020-09-28T02:45:52.240 回答