从内部视图swiftui设置父视图变量

时间:2020-09-16 21:03:14

标签: swiftui

我正在尝试创建一个类似于视图的容器以显示加载程序或绘制背景。

import SwiftUI

struct BaseView<Content: View> : View {
    @State var displayLoader = false
    
    var content: () -> Content
    var body: some View {
        GeometryReader { geometry in
            ZStack {
                Image("")
                    .resizable()
                    .aspectRatio(geometry.size, contentMode: .fill)
                    .edgesIgnoringSafeArea(.all)
                    .background(LinearGradient(gradient: Gradient(colors: [.colorDarkGray, .colorGray]), startPoint: .top, endPoint: .bottom))
                
                LoadingView(isShowing: .constant(self.displayLoader)) {
                    self.content() // here i want to send parameter to inner view.
                }
                
            }
        }
    }
}

这是我创建的内部视图之一

struct LoginOptionsView: View {
    var body: some View {
        BaseView {
            VStack(){
                                                         
                 VStack() {
                        
                     Button(action: {
                //HERE I WANT TO DISPLAY LOADER FROM PARENT VIEW like to set displayLoader to true. 
                                 }) {
                                     Text("LOG IN").foregroundColor(Color.white)
                                        
                                 }
                                 .frame(minWidth: 0, idealWidth: .infinity, maxWidth: 0, minHeight: 50, idealHeight: 50, maxHeight: .none, alignment: .center)
                                 .background(Color.colorPink)
                                 .cornerRadius(25, antialiased: true)
                                 
                     
                 }         
                                                         
                           }
        }
}

我尝试绑定,可观察对象等,但是我无法向self.content发送一个参数,它是displayLoader。 有没有很简单的方法?

1 个答案:

答案 0 :(得分:0)

如果要在父视图中获取更新的值,则不应使用constant绑定。

// self.$displayLoader gives you the binding you want
LoadingView(isShowing: self.$displayLoader) {
    self.content() // here i want to send parameter to inner view.
}

您现在可以将displayLoader作为绑定发送到LoginOptionsView并更改值。