#ios #swiftui
Вопрос:
У меня есть навигационное представление, в котором есть несколько уровней навигационной ссылки.
например, A1->A2->>A3->>>A4->>>>A5.
struct A1: View {
var body: some View {
VStack{
Text("this is A1")
NavigationLink("to a2", destination: A2())
}
}
}
struct A2: View {
var body: some View {
VStack{
Text("this is A2")
NavigationLink("to a3", destination: A3())
}
}
}
struct A3: View {
var body: some View {
VStack{
Text("this is A3")
NavigationLink("to a4", destination: A4())
}
}
}
struct A4: View {
var body: some View {
VStack{
Text("this is A4")
NavigationLink("to a5", destination: A5())
}
}
}
struct A5: View {
var body: some View {
VStack{
Text("this is A5")
NavigationLink("to A2", destination: A2())
}
}
}
Тем не менее, это только добавляет еще A2()
один уровень до 6-го, вместо этого перейдите обратно на второй уровень.
Я заметил, что есть @Environment(.presentationMode) var mode: Binding<PresentationMode>
и self.mode.wrappedValue.dismiss()
для выполнения программной навигации назад, но все еще не могу найти способ сделать это несколько раз одновременно.
Пожалуйста, помогите мне.
Ответ №1:
Вам нужно использовать следующее NavigationLink
A2
.
init(destination: Destination, isActive: Binding<Bool>, label: () -> Label)
Создает навигационную ссылку, которая представляет представление назначения, когда оно активно.
Используйте следующее NavigationLink
в A3
и A4
.
init(destination: () -> Destination, label: () -> Label)
Создает навигационную ссылку, которая представляет представление назначения.
https://developer.apple.com/documentation/swiftui/navigationlink/init(пункт назначения:метка:)-27n7s
В A5
, используйте Button
instad of NavigationLink
.
И передай isActive
наверх A5
. Переключайтесь isActive
при нажатии кнопки.
В этом примере A2-это представление, к которому вы хотите вернуться.
struct A2: View {
@State private var isActive: Bool = false
var body: some View {
NavigationView {
NavigationLink(destination: A3(isActive: self.$isActive), isActive: $isActive) {TText("this is A2") }
}
}
}
struct A3: View {
@Binding var isActive: Bool
var body: some View {
VStack {
NavigationLink(destination: A4(isActive: self.$isActive)) {Text("this is A3"))}
}
}
}
struct A4: View {
@Binding var isActive: Bool
var body: some View {
VStack {
NavigationLink(destination: A5(isActive: self.$isActive)) {Text("this is A4"))}
}
}
}
struct A5: View {
@Binding var isActive: Bool
var body: some View {
Button(action: {
self.isActive.toggle()
}, label: {
Text("this is A5")
})
}
}