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