Search code examples
iosswiftswiftuiuidatepicker

SwiftUI - @Binding:String from DatePickerView


I am trying to get a @Binding:String value returned from a DatePickerView in SwiftUI.

Can anyone tell me where the formatting code should go?.. I have so far tried in .onAppear which generates an initial value but doesn't update (NS)... also tried in the body and .onDisappear .. but nothing gets returned ...

struct DateView: View {

        @Binding var dateString: String
        @State var selectedDate: Date = Date()
        let formatter = DateFormatter()

        var body: some View {

            formatter.dateFormat = "d MMM y"
            dateString = formatter.string(from: selectedDate)
            print(self.dateString)

            return DatePicker(selection: $selectedDate, displayedComponents: .date) {
                Text("Select a date")
            }.labelsHidden()
        }
    }

tried

struct DateView: View {

        @Binding var dateString: String
        @State var selectedDate: Date = Date()
        let formatter = DateFormatter()

        var body: some View {

            DatePicker(selection: $selectedDate, displayedComponents: .date) {
                Text("Select a date")
            }.labelsHidden()
                .onAppear(){

                    self.formatter.dateFormat = "d MMM y"
                    self.dateString = self.formatter.string(from: self.selectedDate)
                    print(self.dateString)
            }
        }
    }

Solution

  • here is code.

    struct ContentView: View {
     @ObservedObject var value = SelectionChnage()
       let formatter = DateFormatter()
       var body: some View {
        DatePicker(selection: $value.selection, displayedComponents: .date) {
               Text("Select a date")
            }.labelsHidden()
       }
    

    }

    final class SelectionChnage: ObservableObject {
    var selection: Date = Date() {
        didSet {
            date_formate(slectedate: selection)
        }
    }
    

    }

    func date_formate(slectedate: Date) {
    let formatter = DateFormatter()
    formatter.dateFormat = "d MMM y"
    let dateString = formatter.string(from: slectedate)
    print(dateString)
    

    }