Reputation: 1934
I have **two date pickers from date and until date also two time Pickers from time and until time in my ViewController. I want to validate it like as** 1. If from and until date is same then until time is not less than from time.
second time should be greater than or equal to first time. Check the code below which is in my ViewController class.
@IBOutlet weak var fromCalender: UITextField!
@IBOutlet weak var fromTime: UITextField!
@IBOutlet weak var untilTheCalender: UITextField!
@IBOutlet weak var untilTheTime: UITextField!
var fromDatePicker = UIDatePicker()
var fromTimePicker = UIDatePicker()
var untilTheDatePicker = UIDatePicker()
var untilTheTimePicker = UIDatePicker()@IBAction func fromCalenderDatePicker(_ sender: UITextField) {
fromDatePicker.datePickerMode = .date
sender.inputView = fromDatePicker
fromDatePicker.minimumDate = Calendar.current.date(byAdding: .year, value: 0, to: Date())
fromDatePicker.addTarget(self, action: #selector(handleFromCalenderDatePicker(sender:)), for: .valueChanged)
}
@objc func handleFromCalenderDatePicker(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
fromCalender.text = dateFormatter.string(from: sender.date)
untilTheDatePicker.minimumDate = sender.date
}
@IBAction func untilTheCalenderDatePicker(_ sender: UITextField) {
untilTheDatePicker.datePickerMode = .date
sender.inputView = untilTheDatePicker
untilTheDatePicker.addTarget(self, action: #selector(untilTheCalenderDatePicker(sender:)), for: .valueChanged)
}
@objc func untilTheCalenderDatePicker(sender: UIDatePicker) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd MMM yyyy"
untilTheCalender.text = dateFormatter.string(from: sender.date)
}
@IBAction func fromTimePicker(_ sender: UITextField) {
fromTimePicker.datePickerMode = .time
sender.inputView = fromTimePicker
fromTimePicker.addTarget(self, action: #selector(handleTimePicker(sender:)), for: .valueChanged)
}
@objc func handleTimePicker(sender: UIDatePicker) {
let timeFormatter = DateFormatter()
timeFormatter.dateStyle = .none
timeFormatter.timeStyle = .short
timeFormatter.dateFormat = "HH:mm"
fromTime.text = timeFormatter.string(from: sender.date)
untilTheDatePicker.minimumDate = sender.date
}
@IBAction func untilTheTimePicker(_ sender: UITextField) {
untilTheTimePicker.datePickerMode = .time
sender.inputView = untilTheTimePicker
untilTheTimePicker.addTarget(self, action: #selector(handleUntilTheTimePicker(sender:)), for: .valueChanged)
}
@objc func handleUntilTheTimePicker(sender: UIDatePicker) {
let timeFormatter = DateFormatter()
timeFormatter.dateStyle = .none
timeFormatter.timeStyle = .short
timeFormatter.dateFormat = "HH:mm"
untilTheTime.text = timeFormatter.string(from: sender.date)
}
Please give me any solution to do this.
Upvotes: 0
Views: 1151
Reputation: 5088
Inside the first UIDatePicker
Delegate Method datePickerChanged
you can use the sender.date
as a minimumDate
for the second UIDatePicker
, Also add a default minimumDate
to the second one same as the first one.
Your code should be something like this.
@objc func datePickerChanged(_ sender: UIDatePicker) {
fromCalender.text = dateFormatter.string(from: sender.date)
untilTheDatePicker. minimumDate = sender.date
}
For the .time
pickers use the same approach as Date()
already contains the Time components.
so just add .minimumDate = sender.date
Upvotes: 1