如何在编辑其他字段时自动折叠表单中的 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 可折叠复合字段允许我保存但在编辑时无法重新打开

如何在Access中使用子表单时编辑现有记录而不创建新记录?

如何使用来自两个不同表的旧信息自动填充编辑表单?

如何在 SwiftUI 中自动填充文本字段?

HTML 源代码编辑器 - Web 部件

layui垂直菜单如何单击菜单时,其他已展开的菜单自动折叠?