首页 > 解决方案 > 从 DatePicker SwiftUI 更改选定的日期格式

问题描述

有没有办法格式化日期?(从图片中箭头指示的位置)我知道它是根据语言环境格式化的,但有没有办法自己格式化?

在此处输入图像描述

struct ContentView: View {

    @State private var selectedDate = Date()

    var body: some View {
        Form {

            DatePicker(selection: $selectedDate, in: ...Date(), displayedComponents: .date) {
                Text("From*")
            }
        }
    }
}

标签: iosdatepickerswiftui

解决方案


我能想到的唯一方法是创建我自己的自定义 DatePicker 视图并在 TextField 上使用 onAppear 来更新 @State selectedDateText: String 变量以在 TextField 中显示。这感觉就像一个黑客,我几乎不好意思发布它,但它有效。一般来说,我是 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 代码。来自这篇文章:如何使用 SwiftUI 和 Combine 检测 Datepicker 的值变化?


推荐阅读