我在DatePicker
中有两个Form
。第二个日期的开始日期取决于第一个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
的操作?
答案 0 :(得分:0)
首先,创建一个具有以下属性的新结构: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
}
}
}