Как перейти к любому представлению внутри 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 ответа

Основной обходной путь - добавить @Binding и передать его. проверьте индекс привязки на появлении. если это не индекс, то представление.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")
    }
}
Другие вопросы по тегам