Создать NavigationLink без кнопки возврата SwiftUI - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь связать действие кнопки в SomeView1 (), чтобы перейти к someView2 () без кнопки «Назад» в верхней части экрана. Вместо этого я хочу добавить еще одну кнопку в SomeView2 (), которая вернется к SomeView1 (). это возможно в SwiftUI еще?

SomeView1 ()

struct SomeView1: View {
    var body: some View {
        NavigationView {
            VStack {
                //...view's content

                NavigationLink(destination: SomeView2()) {
                    Text("go to SomeView2")
                }
                Spacer()
            }
        }
    }
}

SomeView2 ()

struct SomeView2: View {
    var body: some View {
        NavigationView {
            VStack {
                //...view's content

                NavigationLink(destination: SomeView1()) {
                    Text("go to SomeView1")
                }
                Spacer()
            }
        }
    }
}

это выглядит так: enter image description here

Ответы [ 3 ]

2 голосов
/ 25 октября 2019

Правильный способ получить то, что вам нужно, это использовать переменную окружения presentationMode:

import SwiftUI

struct View2: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var body: some View {
        VStack {
            Button(action: {
                self.presentationMode.wrappedValue.dismiss()
            }) {
                Text("POP")
            }
        }
        .navigationBarTitle("")
        .navigationBarBackButtonHidden(true)
        .navigationBarHidden(true)
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: View2()) {
                Text("PUSH")
                    .navigationBarTitle("")
                    .navigationBarHidden(true)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
0 голосов
/ 25 октября 2019

Я считаю, что вы должны использовать только один NavigationView для всего процесса навигации. Теперь у вас есть три NavigationView внутри друг друга, который производит три кнопки назад.

Так что в вашем случае это могло бы выглядеть примерно так:

struct SomeView1InsideNavigationView: View { // This should be the first view you present
    var body: some View {
        NavigationView { // Use NavigationView only once
            SomeView1()
        }
    }
}

struct SomeView1: View {
    var body: some View {
        VStack { // Do *not* use NavigationView here
            //...view's content

            NavigationLink(destination: SomeView2()) {
                Text("go to SomeView2")
            }
            Spacer()
        }
    }
}

struct SomeView2: View {
    var body: some View {
        VStack { // Do *not* use NavigationView here
            //...view's content

            NavigationLink(destination: SomeView1()) {
                Text("go to SomeView1")
            }
            Spacer()
        }
    }
}
0 голосов
/ 25 октября 2019

Вы можете сделать что-то подобное в SomeView2():

NavigationView {
   VStack {
            //...view's content

        NavigationLink(destination: SomeView1()) {
            Text("go to SomeView1")
        }
        Spacer()
    }
}.navigationBarBackButtonHidden(true)
...