Вам нужно добавить цель для вашего средства выбора даты для UIControlEvents .valueChanged
и получить минутный компонент от выбранной даты. Для расчета следующего часа четверти минуты вы можете использовать следующую формулу (x - x % 15 + 15) % 60
:
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var datePicker: UIDatePicker!
override func viewDidLoad() {
super.viewDidLoad()
datePicker.addTarget(self, action: #selector(datePickerValueChanged), for: .valueChanged)
}
@objc func datePickerValueChanged(datePicker: UIDatePicker) {
if datePicker.date.minute % 15 != 0 {
if datePicker.date.minute > 45 {
datePicker.date += 60*60
}
datePicker.date = datePicker.date.nextHourQuarter
}
}
}
extension Int {
var nextHourQuarter: Int {
return (self - self % 15 + 15) % 60
}
}
extension Date {
var hour: Int { return Calendar.current.component(.hour, from: self) }
var minute: Int { return Calendar.current.component(.minute, from: self) }
var nextHourQuarter: Date {
return Calendar.current.date(bySettingHour: hour, minute: minute.nextHourQuarter, second: 0, of: self)!
}
}
Sample