Hey 😊
The way I went around this is by setting my variable to the current date when dismissing the picker.
@IBOutlet weak var dateTextField: UITextField!
var selectedDate: String = ""
private func createDatePicker() {
let currentDate = Date()
datePicker = UIDatePicker()
datePicker.datePickerMode = .date
if #available(iOS 14.0, *) {
datePicker.preferredDatePickerStyle = .inline
}
datePicker.maximumDate = currentDate
datePicker.addTarget(self, action: #selector(datePickerValueChanged(_:)), for: .valueChanged)
dateTextField.inputView = datePicker
dateTextField.inputAccessoryView = createToolbar()
}
private func createToolbar() -> UIView {
let toolbar = UIToolbar()
let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismissDatePicker))
let flexSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.flexibleSpace, target: nil, action: nil)
toolbar.sizeToFit()
toolbar.setItems([flexSpace, doneButton], animated: true)
return toolbar
}
private func setupDateFormatter() {
dateFormatter.dateStyle = .long
dateFormatter.locale = Locale(identifier: "en_GB")
}
@objc func dismissDatePicker() {
selectedDate = dateFormatter.string(from: datePicker.date)
dateTextField.text = selectedDate
endEditing(true)
}
@objc func datePickerValueChanged(_ sender: UIDatePicker) {
selectedDate = dateFormatter.string(from: sender.date)
dateTextField.text = selectedDate
}
Hope that helps.
Topic:
UI Frameworks
SubTopic:
UIKit
Tags: