如何在编辑其他字段时自动折叠表单中的 DatePicker?
Posted
技术标签:
【中文标题】如何在编辑其他字段时自动折叠表单中的 DatePicker?【英文标题】:How to automatically collapse DatePicker in a form when other field is being edited? 【发布时间】:2020-04-05 10:31:41 【问题描述】:我得到了一个简单的 SwiftUI 视图:
import SwiftUI
struct AddItemView: View
@State private var title = ""
@State private var date = Date()
var body: some View
Form
Section
TextField("Title", text: $title)
DatePicker(
selection: $date,
in: Date()...,
displayedComponents: .date,
label: Text("Date")
)
struct AddItemView_Previews: PreviewProvider
static var previews: some View
AddItemView()
我正在努力实现以下目标:
如果DatePicker
展开(用户点击日期选择器,选择器显示***以选择日期)然后开始在TextField
中输入文本,DatePicker
应自动切换到初始最小化模式(仅显示标签和选定日期)。请看一下截图。这是股票 Calendar.app 中的一种行为,例如,在创建事件时。
任何帮助表示赞赏,谢谢。
【问题讨论】:
【参考方案1】:这是可能的方法。这个想法是为每个事件导致编辑重置DatePicker
组件。
使用 Xcode 11.4 / ios 13.4 测试
struct AddItemView: View
@State private var title = ""
@State private var date = Date()
@State private var pickerReset = UUID()
var body: some View
Form
Section
TitleTextField()
DatePicker(
selection: $date,
in: Date()...,
displayedComponents: .date,
label: Text("Date")
).id(self.pickerReset)
private func TitleTextField() -> some View
let boundText = Binding<String>(
get: self.title ,
set: self.title = $0; self.pickerReset = UUID()
)
return TextField("Title", text: boundText, onEditingChanged: editing in
if editing
self.pickerReset = UUID()
)
【讨论】:
以上是关于如何在编辑其他字段时自动折叠表单中的 DatePicker?的主要内容,如果未能解决你的问题,请参考以下文章
具有多值的 Magnolia 可折叠复合字段允许我保存但在编辑时无法重新打开