Cla*_*diu 7 datepicker ios swiftui
有没有办法格式化日期?(从图片中箭头指示的位置)我知道它是根据语言环境格式化的,但有没有办法自己格式化它?
struct ContentView: View {
@State private var selectedDate = Date()
var body: some View {
Form {
DatePicker(selection: $selectedDate, in: ...Date(), displayedComponents: .date) {
Text("From*")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 4
我能想到实现此目的的唯一方法是创建自己的自定义 DatePicker 视图,并在 TextField 上使用 onAppear 来更新 @State selectedDateText: String 变量以在 TextField 中显示。这感觉就像一个黑客,我\xe2\x80\x99m 几乎不好意思发布它,但它有效。我\xe2\x80\x99m 是Swift 和iOS 编程的新手,所以我\xe2\x80\x99m 确信有人会提出更好的答案,所以我\xe2\x80\x99ll 提供这个\xe2\x80\ x99 的价值。我的自定义视图是这样的:
\nstruct CustomDatePicker: View {\n @Binding var date: Date\n\n @State private var showPicker: Bool = false\n @State private var selectedDateText: String = "Date"\n\n private var selectedDate: Binding<Date> {\n Binding<Date>(get: { self.date}, set : {\n self.date = $0\n self.setDateString()\n })\n } // This private var I found\xe2\x80\xa6 somewhere. I wish I could remember where\n\n // To take the selected date and store it as a string for the text field\n private func setDateString() {\n let formatter = DateFormatter()\n formatter.dateFormat = "MMMM dd, yyyy"\n\n self.selectedDateText = formatter.string(from: self.date)\n }\n\n var body: some View {\n VStack {\n HStack {\n Text("Date:")\n .frame(alignment: .leading)\n \n TextField("", text: $selectedDateText)\n .onAppear() {\n self.setDateString()\n }\n .disabled(true)\n .onTapGesture {\n self.showPicker.toggle()\n }\n .multilineTextAlignment(.trailing)\n } \n \n if showPicker {\n DatePicker("", selection: selectedDate,\n displayedComponents: .date)\n .datePickerStyle(WheelDatePickerStyle())\n .labelsHidden()\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n编辑:我找到了私有 var 代码的来源。来自这篇文章:How to detector a value change of a Datepicker using SwiftUI and Joint?
\n