首页 > 解决方案 > 如何在视图之间传递@State var?

问题描述

我不想有一个无法选择日期的视图,然后我想单击一个按钮,该按钮将打开GraphView,并将@Statevar date 发送到另一个视图,因此我可以在 GraphView 中使用 date var .

这是我到目前为止所尝试的,但它显示了错误:

传递给不带参数的调用的参数

struct ContentView: View {
    @State var showGraph = false
    
    var dateFormatterMonth: DateFormatter {
        let formatter = DateFormatter()
        formatter.setLocalizedDateFormatFromTemplate("M")
        
        return formatter
    }
    
    @State var date = Date()
    
    var body: some View {
        Button(action: {
            self.showGraph.toggle()
        }) {
            Text("Show Graph")
        }.sheet(isPresented: $showGraph){
            GraphView(date: date) {
            }
        }
        
        if showGraph {
            GraphView()
        }
        else {
            DatePicker("Date", selection: $date, displayedComponents: .date)
                .frame(width: 100, height: 20, alignment: .center)
            
            Text("Date is \(date, formatter: dateFormatterMonth)")
        }
    

标签: swiftviewswiftui

解决方案


您需要使用 Binding in GraphView,例如

struct GraphView: View {
   @Binding var date: Date     // << here !!

...
}

并通过它,

    Button(action: {
        self.showGraph.toggle()
    }) {
        Text("Show Graph")
    }.sheet(isPresented: $showGraph){
        GraphView(date: $date) {        // << here !!
        }
    }
    
    if showGraph {
        GraphView(date: $date)   // << here !!
    }

推荐阅读