【问题标题】:SwiftUI - Passing a variable up through View Hierarchy and back down again?SwiftUI - 通过视图层次结构向上传递变量并再次向下传递?
【发布时间】:2023-02-12 23:07:06
【问题描述】:

我有 3 个视图:1) ContentView,它有一个 TabView 导致 2) NestedView,它有一个弹出视图,使它后面的屏幕变暗,称为 3) SelectView

这是ContentView的必要代码。我有一个指向NestedViewTabView 和当darken 为真时使背景变暗和模糊的条件。

 TabView (selection: $selection){
                
                NestedView()
                    .tabItem {
                        selection == 0 ? Image(systemName: "house.fill") : Image(systemName: "house")
                    }
                    .tag(0)   
            }   
            if darken {
                ZStack {
                    ZStack {
                        Rectangle()
                            .ignoresSafeArea(.all)
                            .foregroundColor(Color.black).opacity(0.75)
                    }.background(Blur(style: .systemChromeMaterial).opacity(0.85)
                        .ignoresSafeArea(.all))
                    SelectView(darken: $darken)
                }

我想将数据传递给 SelectView 构造函数,但我不确定如何从那里获取数据。

这是NestedView的代码

    @State var dataArray: [ItemDataModel]
    @Binding var darken: Bool

Button(action: {
                darken = true
            }) {

我需要通过 ContentView 中的 SelectView 构造函数发送 dataArray。

SelectView 中,我有一个变暗的绑定变量,我知道我需要另一个用于接收数据,但我不确定它是否需要是@State 或@Binding 或完全不同的东西。

@Binding var darken: Bool
@________ var dataArray: [ItemDataModel]

【问题讨论】:

    标签: swift swiftui


    【解决方案1】:

    NestedView 不应有 @State var dataArray: [ItemDataModel]

    NestedViewSelectView 应该都有一个@Binding var dataArray: [ItemDataModel]

    您应该将@State var dataArray: [ItemDataModel]向上移动到ContentView,这样它就可以将$dataArray向下传递给NestedViewSelectView

    【讨论】:

    • 谢谢!我现在遇到了另一个问题,即 ContentView 中的 @State 需要一个默认参数,但实际上并没有“默认”。我放在这里的内容是否重要,因为无论如何它都应该随着传递的数据而改变?
    • 我假设您将初始值加载到 .onAppear.taskNestedView 中,因此将它初始化为 ContentView 中的空数组可能没问题。
    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多