Я новичок в SwiftUI, и я изо всех сил пытаюсь успешно перейти к корневому контроллеру при нажатии на NavigationLink
в строке списка. Я следую подходу, продемонстрированному в этом другом сообщении. Я могу заставить эту реализацию работать в другом месте моего проекта, но это немного сложно, когда задействован список.
Настройка такова: ListView содержит список и RowView. При нажатии на ссылку NavigationLink в RowView происходит переход к просмотру 2. При нажатии на ссылку NavigationLink происходит переход X раз, если в списке есть X строк. Я предполагаю, что, щелкнув ссылку NavigationLink, я переключаю ее логическое значение привязки на true, и в результате активируются все ссылки NavigationLink.
struct RowView : View {
@Binding var rootIsActive : Bool
var body: some View {
VStack() {
let view2 = View2(shouldPopToRootView: $rootIsActive)
HStack() {
NavigationLink(destination: view2, isActive: $rootIsActive, label: {Text("Go to view 2")}).isDetailLink(false)
.background(Color.purple)
// Additional UI stuff
}
.frame(height:50)
}
}
}
struct ListView: View {
@State var isActive : Bool = false
var someItems: [SomeObj] = []
var body: some View {
NavigationView {
VStack() {
// Other UI stuff
List {
ForEach(self.someItems) { item in
Section(header: RowView(rootIsActive: $isActive).onTapGesture {
// debug code
})
}
}
}
}
}
}
struct View2: View {
@Binding var shouldPopToRootView : Bool
var body: some View {
ZStack() {
//UI Stuff
}
.navigationBarItems(trailing: Button(action: {
// Pop to root
self.shouldPopToRootView = false
}, label: {
Text("Save")
}))
}
}