我对 SwiftUI 有点陌生,当单击列表中的 NavigationLink
时,我很难成功弹出到根控制器。我正在遵循此 other post 中演示的方法。我可以让这个实现在我项目的其他地方工作,但是当涉及到 List 时它有点棘手。
设置为:ListView包含List和RowView。单击 RowView 中的 NavigationLink 转至 View 2。发生的事情是,当我单击 NavigationLink 时,如果列表中有 X 行,它会转 X 次。我假设通过单击 NavigationLink,我将绑定 bool 切换为 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")
}))
}
}