从 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*")
            
        
    

【问题讨论】:

自己格式化是什么意思?您已经有一个名为 selectedDateDate 我假设 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 在更改日期时在短日期格式和中日期格式之间跳转

MUI - 在 DatePicker 中更改特定日期颜色

如何使用 SwiftUI 和 Combine 检测 Datepicker 的值变化?

更新 SwiftUI 列表中的选定对象

SwiftUI Mac OS DatePicker 在编辑时跳回到今天