如何以编程方式更改 swiftUI DatePicker 的选定值
Posted
技术标签:
【中文标题】如何以编程方式更改 swiftUI DatePicker 的选定值【英文标题】:How to change selected value of swiftUI DatePicker programmatically 【发布时间】:2022-01-23 20:17:32 【问题描述】:我有一个由三个 swiftUI 选择器(两个 DatePickers 和一个标准字符串选择器)组成的 swiftUI 表单。当字符串 Picker 的值发生变化时,我正在尝试更改第二个 DatePicker 的选定值。
我在字符串 Picker 上使用 .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)
【问题讨论】:
如果没有Minimal Reproducible Example,就无法帮助您进行故障排除。它们有什么关系? 【参考方案1】:我们需要将DatePicker
依赖于外部更改的dueDate
并重建它。 .id
修饰符对此很有用,比如
DatePicker("Due Date:", selection: $formValues.dueDate, displayedComponents: [.date])
.id(formValues.dueDate) // << here !!
使用 Xcode 13.2 / ios 15.2 测试
【讨论】:
经过测试并且运行良好(Xcode 13.1、iOS 15.0)。正是我正在寻找的行为。谢谢。以上是关于如何以编程方式更改 swiftUI DatePicker 的选定值的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI:创建自己的 TextField 并以编程方式更改内容
如何在 SwiftUI 中以编程方式计算 MKMapCamera centerCoordinateDistance