SwiftUI DatePicker 并不总是更新 State<Date> 变量
Posted
技术标签:
【中文标题】SwiftUI DatePicker 并不总是更新 State<Date> 变量【英文标题】:SwiftUI DatePicker does not always update State<Date> variable 【发布时间】:2020-05-05 15:10:56 【问题描述】:由于某种原因,DatePicker
并不总是更新与之关联的日期变量。难道我做错了什么?我基本上可以随机滚动,有时我可以到达显示当前选择日期 (var $entryDate
) 的文本与我选择的 DatePicker
显示的不同点 - 我的代码:
struct addView: View
@State private var entryDate: Date = Date()
var body: some View
VStack
HStack
Spacer()
DatePicker("_", selection: $entryDate, in: ...Date(), displayedComponents: .date)
.labelsHidden()
.datePickerStyle(WheelDatePickerStyle())
.frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
.environment(\.locale, Locale.current)
Spacer()
Text("\(entryDate)")
【问题讨论】:
【参考方案1】:这是一个已知的 SwiftUI 错误。 我用一些解决方法解决了它:
@State private var refresh = false
DatePicker("_" + (refresh ? "" : " "), selection: $entryDate, in: ...Date(), displayedComponents: .date)
.labelsHidden()
.datePickerStyle(WheelDatePickerStyle())
.frame(minWidth: 0, maxWidth: .infinity, alignment: .center)
.environment(\.locale, Locale.current)
在您的视图结束时:
.onReceive(self.$refresh) _ in
self.refresh.toggle()
甚至应该使用您的 labelsHidden()。
【讨论】:
使用您的建议结果:Cannot convert value of type '(_) -> ()' to expected argument type '(_.Output) -> Void'
【参考方案2】:
这里有一个解决方法:
@State private var refresh: Bool = false
DatePicker("_" + (refresh ? "" : " "), selection: $entryDate, displayedComponents: [.hourAndMinute])
.datePickerStyle(.wheel)
.labelsHidden()
然后,每当您在选择器之外编辑 $entryDate
时,调用
self.refresh.toggle()
DatePicker 会正确更新。
【讨论】:
以上是关于SwiftUI DatePicker 并不总是更新 State<Date> 变量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftUI 和 Combine 检测 Datepicker 的值变化?
如何在 SwiftUI 中将 DatePicker 放入 ContextMenu
在打印语句 SwiftUI 上显示 DatePicker hourAndMinute
在 SwiftUI 中创建具有特定日期的 DatePicker