如何在 SwiftUI 中的两个日期选择器中将一个绑定变量的值传递给另一个绑定变量?



我在一个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操作?

首先,创建一个具有以下属性的新结构:startdate 和 enddate,并在该结构中使用观察者 funcdidSet。下面是代码的示例。

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
}
}
}

最新更新