hi guys im trying to create a time picker which hours are only from (2pm - 9pm) and minutes are incremented by 30 this is the picture of timePicker that i want to create here is my code
func creatTimePicker() {
timePicker.datePickerMode = .time
timePicker.minuteInterval = 30
let timeformatter = DateFormatter()
timeformatter.dateFormat = "HH:mm"
let min = timeformatter.date(from: "5:00")
let max = timeformatter.date(from: "9:00")
timePicker.minimumDate = min
timePicker.maximumDate = max
self.contentView.addSubview(timePicker)
}
the problem is hour starts 1-12 and minute starts 00-59 what is the problem? thank you
You can use Calendar to constraint the time range for UIDatePicker()
let picker = UIDatePicker()
picker.datePickerMode = .time
let minDate = Calendar.current.date(bySettingHour: 14, minute: 0, second: 0, of: Date()) // 2PM
let maxDate = Calendar.current.date(bySettingHour: 21, minute: 0, second: 0, of: Date()) // 9PM
picker.minimumDate = minDate
picker.maximumDate = maxDate
This won't let user select time outside the specified time range.
You can use UIPickerView
Example:
let picker = UIPickerView()
picker.dataSource = self
picker.delegate = self
let hoursRange = Array(5...9)
// Data source
func numberOfComponents(in: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
print("Com :\(component)")
if component == 0 {
return hoursRange.count
}
return 1 // For the PM indicator
}
// Delegate
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {
switch component {
case 0:
return "\(hoursRange[row])"
case 1:
return "AM"
default:
return nil
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With