在SwiftUI中,如果绑定是从EnvironmentObject派生的,您可以将绑定向下传递到嵌套视图吗?

时间:2020-05-14 08:10:12

标签: swiftui swiftui-environment swiftui-form

在下面的工作示例中,编辑已发布的Test.Data的名称将起作用,编辑父项的名称将起作用,但是编辑子项的名称将导致NavigationView弹出。

编辑嵌套时,NavigationView有什么方法不弹出吗?

class Test:ObservableObject {
@Published var data:Data = .init()

    struct Data:Identifiable {
        var id:UUID = UUID()
        var name:String = ""
        var parents:[Parent] = [.init()]
    }

    struct ContentView:SwiftUI.View {
        @EnvironmentObject var test:Test

        var body: some SwiftUI.View {
            NavigationView {
                Form {
                    $test.data.name.view(with: "Name")
                    ForEach(enumerating: test.data.parents) { index, item in
                        NavigationLink(destination: Form { Parent.View(parent: self.$test.data.parents[index]) }) {
                            Text(item.name)
                        }
                    }
                }
            }
        }
    }
}

struct Parent:Identifiable {
    var id:UUID = UUID()
    var name:String = ""
    var children:[Child] = [.init()]

    struct View: SwiftUI.View {
        @Binding var parent:Parent
        var body: some SwiftUI.View {
            Group {
                $parent.name.view(with: "Name of the parent")
                ForEach(enumerating: parent.children) { index, item in
                    NavigationLink(destination: Form { Child.View(child: self.$parent.children[index]) }) {
                        Text(item.name)
                    }
                }
            }
        }
    }
}


struct Child:Identifiable {
    var id:UUID = UUID()
    var name:String = ""

    struct View: SwiftUI.View {
        @Binding var child:Child
        var body: some SwiftUI.View {
            Group {
                $child.name.view(with: "Name of the child")
            }
        }
    }
}

0 个答案:

没有答案