如何以编程方式更改 swiftUI DatePicker 的选定值
How to change selected value of swiftUI DatePicker programmatically
我有一个由三个 swiftUI 选择器(两个 DatePickers 和一个标准字符串选择器)组成的 swiftUI 表单。当字符串 Picker 的值发生变化时,我试图更改第二个 DatePicker 的选定值。
我在字符串选择器上使用 .onChange 来更新基础值,这工作正常(我添加了一个文本行来显示截止日期值,以便可以验证更改)。但是,我希望到期日期选择器在绑定值更改时更新它显示的日期。
*以下屏幕截图中的值为初始设置值。
struct FormWithPicker: View {
@StateObject var formValues = FormValues()
var body: some View {
NavigationView {
Form{
// invoice date
DatePicker("Invoice Date:", selection: $formValues.invoiceDate, displayedComponents: [.date])
// terms
Picker("Terms:", selection: $formValues.invoiceTerms) {
ForEach(formValues.terms, id: \.self) { term in
Text(term)
}
}
.onChange(of: formValues.invoiceTerms, perform: { _ in
formValues.incrementDueDate()
})
// due date
DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
// text
Text(formValues.dueDate.description)
}
}
}
}
我们需要依赖 DatePicker
外部更改的 dueDate
并重建它。 .id
修饰符对此很有用,比如
DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
.id(formValues.dueDate) // << here !!
测试 Xcode 13.2 / iOS 15.2
我有一个由三个 swiftUI 选择器(两个 DatePickers 和一个标准字符串选择器)组成的 swiftUI 表单。当字符串 Picker 的值发生变化时,我试图更改第二个 DatePicker 的选定值。
我在字符串选择器上使用 .onChange 来更新基础值,这工作正常(我添加了一个文本行来显示截止日期值,以便可以验证更改)。但是,我希望到期日期选择器在绑定值更改时更新它显示的日期。
*以下屏幕截图中的值为初始设置值。
struct FormWithPicker: View {
@StateObject var formValues = FormValues()
var body: some View {
NavigationView {
Form{
// invoice date
DatePicker("Invoice Date:", selection: $formValues.invoiceDate, displayedComponents: [.date])
// terms
Picker("Terms:", selection: $formValues.invoiceTerms) {
ForEach(formValues.terms, id: \.self) { term in
Text(term)
}
}
.onChange(of: formValues.invoiceTerms, perform: { _ in
formValues.incrementDueDate()
})
// due date
DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
// text
Text(formValues.dueDate.description)
}
}
}
}
我们需要依赖 DatePicker
外部更改的 dueDate
并重建它。 .id
修饰符对此很有用,比如
DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
.id(formValues.dueDate) // << here !!
测试 Xcode 13.2 / iOS 15.2