【问题标题】:How can pass the value of a binding variable to another binding variable in two DatePicker in SwiftUI?如何将绑定变量的值传递给 SwiftUI 中两个 DatePicker 中的另一个绑定变量?
【发布时间】:2019-09-19 19:42:41
【问题描述】:

Form 中有两个 DatePicker。第二个的开始日期取决于第一个DatePicker 的日期。可以用PartialRangeFrom解决,但是作为选择的绑定对象不会改变。

struct ContentView: View {

    @State private var startDate: Date = Date()
    @State private var endDate: Date = Date()

    var body: some View {
        Form {
            DatePicker(selection: $startDate, displayedComponents: .date, label: { Text("Start date") })

            DatePicker(selection: $endDate, in: startDate..., displayedComponents: .date, label: { Text("End date") })

        }
    }
}

当第一个日期选择器更改时,第二个日期选择器确实会更改并刷新,但与$endDate 链接的标签没有更改,它仍然继续显示初始化值。

如何在第一个日期选择器更改的同时在标签和轮子刷新中执行self.endDate = self.startDate 之类的操作?

【问题讨论】:

    标签: datepicker swiftui


    【解决方案1】:

    首先,创建一个具有以下属性的新 struct:startdate 和 enddate,并在该结构内使用观察者函数 didSet。这是代码示例。

    struct ContentView: View {
        @State var model = DateRangeModel()
    
        var body: some View {
            Form {
                DatePicker(selection: $model.startDate, displayedComponents: .date, label: { Text("Start date") })
    
                DatePicker(selection: $model.endDate, in: model.startDate..., displayedComponents: .date, label: { Text("End date") })
    
            }
    
        }
    }
    
    struct ContentView_Previews: PreviewProvider {
        static var previews: some View {
            ContentView()
        }
    }
    
    
    struct DateRangeModel {
        var endDate: Date = Date()
        var startDate: Date = Date() {
            didSet {
                 endDate = startDate
            }
           }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-10
      • 2021-09-28
      相关资源
      最近更新 更多