Fetching and setting date from datepicker, but still getting old default value

后端 未结 2 897
悲哀的现实
悲哀的现实 2021-01-14 07:27

I want to fetch and set date from DatePicker, but my date is not updating. SwiftUI is new to me and I am confused with what type of property wrapper to use. Ple

2条回答
  •  深忆病人
    2021-01-14 08:17

    You can calculate the current date - 15 days using this:

    let previousDate = Calendar.current.date(byAdding: .day, value: -15, to: Date())!
    

    Then use the previousDate in DatePicker`s range:

    DatePicker(selection: $selectedDate, in: previousDate...Date(), displayedComponents: .date) { ...
    

    Summing up, your code can look like this:

    struct DatePickerView: View {
        @Environment(\.presentationMode) var presentationMode
        @ObservedObject var viewModel: MyViewModel
    
        var dateFormatter: DateFormatter {
            let formatter = DateFormatter()
            formatter.dateStyle = .long
            return formatter
        }
    
        @State private var selectedDate = Date()
        let previousDate = Calendar.current.date(byAdding: .day, value: -15, to: Date())!
    
        var body: some View {
            VStack {
                //Title
                HStack{
                Text("SELECT A DATE")
                    .foregroundColor(.white)
                    .font(.system(size: 20))
                }
                    .frame(width:UIScreen.main.bounds.width,height: 60)
                .background(Color.red)
    
                //Date Picker
                DatePicker(selection: $selectedDate, in: previousDate...Date(), displayedComponents: .date) {
                    Text("")
                }.padding(30)
    
                Text("Date is \(selectedDate, formatter: dateFormatter)")
                Spacer()
    
                //Bottom buttons
                Button(action: {
                    self.viewModel.selectedDate = self.selectedDate
                    self.presentationMode.wrappedValue.dismiss()
                }) {
                    Text("DONE")
                    .fontWeight(.semibold)
                }
            }
        }
    }
    

    Tested in Xcode 11.5, Swift 5.2.4.

提交回复
热议问题