Ограничение UIDatePicker датируется конкретным временем. Например, вход DOB в ограниченный возрастной предел

В моем коде у меня есть UITextField, который, когда пользователь заходит, открывает UIDatePicker, чтобы пользователь мог легко и эффективно прокручивать их до даты рождения. Очевидно, что мы не хотим, чтобы UIDatePicker прокручивался до 2015 года и заканчивался так, как в настоящее время. Поскольку это поле ввода "Дата рождения", мне также нужно будет ограничить записи до 16 лет+. Как мне это сделать?

class SignUpViewController: UIViewController, UITextFieldDelegate {

    var datePicker:UIDatePicker!

    @IBOutlet weak var dateTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        // UI DATE PICKER SETUP

        var customView:UIView = UIView(frame: CGRectMake(0, 100, 320, 160))
        customView.backgroundColor = UIColor.clearColor()

        datePicker = UIDatePicker(frame: CGRectMake(0, 0, 320, 160))
        datePicker.datePickerMode = UIDatePickerMode.Date

        customView.addSubview(datePicker)
        dateTextField.inputView = customView
        var doneButton:UIButton = UIButton (frame: CGRectMake(100, 100, 100, 44))
        doneButton.setTitle("Done", forState: UIControlState.Normal)
        doneButton.addTarget(self, action: "datePickerSelected", forControlEvents: UIControlEvents.TouchUpInside)
        doneButton.backgroundColor = UIColor .grayColor()
        dateTextField.inputAccessoryView = doneButton

Ответ 1

Вы можете использовать dateByAddingUnit и вычесть 16 лет из текущей даты, чтобы установить максимальную дату для вашего DatePicker следующим образом:

datePicker.maximumDate = NSCalendar.currentCalendar().dateByAddingUnit(.Year, value: -16, toDate: NSDate(), options: [])

Xcode 10.2.1 • Swift 5

datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: -16, to: Date())

Ответ 2

UIDatePicker имеет maximumDate, который вы можете установить. Просто установите режим "Дата" в IB и добавьте: datePicker.maximumDate = NSDate(timeIntervalSinceNow: -504911232)

-504911232 означает 16 до сегодняшнего дня (годы високосного года)