从 DatePicker SwiftUI 更改选定的日期格式
Posted
技术标签:
【中文标题】从 DatePicker SwiftUI 更改选定的日期格式【英文标题】:Change selected date format from DatePicker SwiftUI 【发布时间】:2020-03-21 21:58:45 【问题描述】:有没有办法格式化日期?(从图中箭头指示的位置)我知道它是根据语言环境格式化的,但有没有办法自己格式化?
struct ContentView: View
@State private var selectedDate = Date()
var body: some View
Form
DatePicker(selection: $selectedDate, in: ...Date(), displayedComponents: .date)
Text("From*")
【问题讨论】:
自己格式化是什么意思?您已经有一个名为selectedDate
的 Date
。
我假设 OP 意味着他们希望将其格式化为,例如 2019 年 11 月 26 日,而不是 26.11.19
@AshleyMills 是的
【参考方案1】:
我能想到的唯一方法是创建我自己的自定义 DatePicker 视图并在 TextField 上使用 onAppear 来更新 @State selectedDateText: String 变量以在 TextField 中显示。这感觉就像一个 hack,我几乎不好意思发布它,但它确实有效。总的来说,我是 Swift 和 ios 编程的新手,所以我相信有人会给出更好的答案,所以我会提供它的价值。我的自定义视图是这样的:
struct CustomDatePicker: View
@Binding var date: Date
@State private var showPicker: Bool = false
@State private var selectedDateText: String = "Date"
private var selectedDate: Binding<Date>
Binding<Date>(get: self.date, set :
self.date = $0
self.setDateString()
)
// This private var I found… somewhere. I wish I could remember where
// To take the selected date and store it as a string for the text field
private func setDateString()
let formatter = DateFormatter()
formatter.dateFormat = "MMMM dd, yyyy"
self.selectedDateText = formatter.string(from: self.date)
var body: some View
VStack
HStack
Text("Date:")
.frame(alignment: .leading)
TextField("", text: $selectedDateText)
.onAppear()
self.setDateString()
.disabled(true)
.onTapGesture
self.showPicker.toggle()
.multilineTextAlignment(.trailing)
if showPicker
DatePicker("", selection: selectedDate,
displayedComponents: .date)
.datePickerStyle(WheelDatePickerStyle())
.labelsHidden()
编辑:我知道我在哪里得到了私有 var 代码。来自这篇文章:How to detect a value change of a Datepicker using SwiftUI and Combine?
【讨论】:
克里斯,我选择这个作为解决方案,尽管我认为如果将它放在表单中它不会起作用,因为在表单中 DatePicker 已经附加了你用HStack @Chris 如果我使用上述答案并将 CustomDatePicker() 作为 swift 文件放置,我将如何在 MyApp.swift 文件中正确调用它?当我输入 CustomDatePicker() 时 - 给了我这个错误:在调用中缺少参数“日期”的参数。 - 当我按下修复时 - 它显示了这个 CustomDatePicker(date: #>) --> 我将如何解决这个问题? @LizG CustomDatePicker(日期: .constant(Date()))以上是关于从 DatePicker SwiftUI 更改选定的日期格式的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中更改 DatePicker 字体粗细
SwiftUI DatePicker 在更改日期时在短日期格式和中日期格式之间跳转