如何知道用户在 SwiftUI 中的日期选择器中触摸了哪一天

Posted

技术标签:

【中文标题】如何知道用户在 SwiftUI 中的日期选择器中触摸了哪一天【英文标题】:How to know what day the user touched in a date picker in SwiftUI 【发布时间】:2021-08-12 21:40:51 【问题描述】:

大家下午好,

我想知道是否有任何方法可以识别在 swiftui 中的 datePicker 中按下了哪一天,因为我想知道用户按下了哪一天并能够将其保存在变量中?

DatePicker("My calendar", selection: $startDate,in:Date()..., displayedComponents: .date)
        
        .accentColor(.Teal)
        .background(
                       RoundedRectangle(cornerRadius: 30)
                        .stroke(Color.Teal, lineWidth: 3)
                    )
        .labelsHidden()
        .environment(\.colorScheme, .dark)
        .datePickerStyle(GraphicalDatePickerStyle())
        .padding()
        

如照片所示,我如何知道用户在第 12 天或第 13 天点击了,在 swiftui 中是否有代表知道?

【问题讨论】:

【参考方案1】:

您可以使用onChange(of:perform:) 修饰符来检测所选日期的变化:

.onChange(of: startDate)  newDate in
    print("selected date: \(newDate)")

    let day = Calendar.current.dateComponents([.day], from: newDate).day!
    print("day: \(day)")

示例打印:

选择日期:2021-08-20 21:59:00 +0000 天:20

【讨论】:

【参考方案2】:

您为选择定义了$startDate。您需要一个名为 startDate 的状态变量来存储选定的日期。

有关完整说明,请点击此链接:https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-a-date-picker-and-read-values-from-it

编辑: 正如@George 提到的,如果您想检测状态变量的变化,请使用onChange(of:perform:) 修饰符。

【讨论】:

以上是关于如何知道用户在 SwiftUI 中的日期选择器中触摸了哪一天的主要内容,如果未能解决你的问题,请参考以下文章

我如何将当前日期与日期选择器中的用户输入日期进行比较

SwiftUI:如何使用 UserDefaults 保存选择器数据?

如何增加 SwiftUI 选择器中显示的最大行数?

如何检查日期范围选择器中的日期是不是更改?

如何限制用户从日期选择器中选择过去的日期?

选择器中的 SwiftUI 和枚举