在SwiftUI中从孩子的孩子调用父母的函数

开发者B2F

我有将函数传递给ChildView的ParentView,然后在ChildView中单击按钮时在ParentView中调用该函数。但是,如果我希望孩子的孩子调用该函数怎么办?我是否需要进一步传递该功能,或者是否可以通过某种方式在整个环境中访问该功能?

struct ParentView: View {
    func parentFunction() {
        print("parentFunction called")
    }

    var body: some View {
        ChildView(p: parentFunction)
    }
}


struct ChildView: View {
    var p: () -> ()
    var body: some View {
        VStack {
            Text("child view")
            Button(action: {
                self.p()
            }) {
                Image(systemName: "person")
            }
        }
    }
}
他的脾气

是的,可以使用自定义定义EnvironmentKey,然后使用它设置父视图环境功能,该功能将可用于所有子视图。

这是方法的演示

struct ParentFunctionKey: EnvironmentKey {
    static let defaultValue: (() -> Void)? = nil
}

extension EnvironmentValues {
    var parentFunction: (() -> Void)? {
        get { self[ParentFunctionKey.self] }
        set { self[ParentFunctionKey.self] = newValue }
    }
}

struct ParentView: View {
    func parentFunction() {
        print("parentFunction called")
    }

    var body: some View {
        VStack {
            ChildView()
        }
        .environment(\.parentFunction, parentFunction) // set in parent
    }
}

struct ChildView: View {
    @Environment(\.parentFunction) var parentFunction // join in child
    var body: some View {
        VStack {
            Text("child view")
            Button(action: {
                self.parentFunction?() // < use in child
            }) {
                Image(systemName: "person")
            }
            Divider()
            SubChildView()
        }
    }
}

struct SubChildView: View {
    @Environment(\.parentFunction) var parentFunction // join in next subchild
    var body: some View {
        VStack {
            Text("Subchild view")
            Button(action: {
                self.parentFunction?() // use in next subchild
            }) {
                Image(systemName: "person.2")
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

让孩子与父母的点击事件

来自分类Dev

父母和孩子中的点击事件

来自分类Dev

父母对孩子的背景

来自分类Dev

XML中的孩子的孩子

来自分类Dev

显示隐形父母的孩子

来自分类Dev

根据父母集合中的孩子计算的财产

来自分类Dev

如何确定哪个孩子调用了父母的方法

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()。(C#)

来自分类Dev

Android | 指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

来自分类Dev

指定的孩子已经有一个父母。您必须先对孩子的父母调用removeView()

来自分类Dev

父母/孩子组合框

来自分类Dev

修改WordPress中父母和孩子的图标

来自分类Dev

Java-编辑父母名单中的孩子

来自分类Dev

父母对孩子的背景

来自分类Dev

根据父母集合中的孩子计算的财产

来自分类Dev

在LINQ中查找有孩子的父母记录

来自分类Dev

让孩子修改其父母

来自分类Dev

JPA与很多孩子建立父母/孩子关系

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()”

来自分类Dev

指定的孩子已经有一个父母。您必须先在孩子的父母上调用removeView()

来自分类Dev

固定父母身后的孩子

来自分类Dev

要求孩子上课时如何调用父母的方法?

来自分类Dev

休眠检索父母/孩子

来自分类Dev

将孩子抛弃给父母

来自分类Dev

将孩子放在比自己窄的父母中

来自分类Dev

活动:您必须先在孩子的父母上调用 removeView()

来自分类Dev

匹配每个父母中孩子的身高

来自分类Dev

相对父母,绝对孩子

来自分类Dev

Reactjs:由孩子触发的父函数调用

Related 相关文章

热门标签

归档