Xcode 限制特定时间的UIDatePicker日期。例如,将DOB输入到限制的年龄限制

Xcode 限制特定时间的UIDatePicker日期。例如,将DOB输入到限制的年龄限制,xcode,swift,nsdate,uidatepicker,Xcode,Swift,Nsdate,Uidatepicker,在我的代码中,我有一个UITextField,当用户点击它时,它会打开一个UIDatePicker,使用户能够轻松有效地滚动到他们的出生日期。显然,我们不希望UIDatePicker像现在这样滚动到2015年甚至更高。由于它是一个出生日期输入字段,我还需要能够将输入限制为16岁以上。我该怎么做 class SignUpViewController: UIViewController, UITextFieldDelegate { var datePicker:UIDatePicker!

在我的代码中,我有一个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

您可以使用dateByAddingUnit并从当前日期减去16年来设置日期选择器的最大日期,如下所示:

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())

UIDatePicker
有一个可以设置的
maximumDate
。只需在IB中将模式设置为“日期”,然后添加:
datePicker.maximumDate=NSDate(timeIntervalSinceNow:-504911232)


-504911232表示今天之前的16年(会计闰年)

不,这并不意味着。504489600是15年11个月25天。提示:闰年。这就是为什么你不用秒来计算日期。把它改为4个闰日。除了重新发明NSCalendar,你可以尝试任何你想要的,你将无法修复它。如果要描述超过一小时的相对时间跨度,则不能使用秒。如果有一个合适的日历,你就无法解释夏时制、闰年或跳过的天数(至少有一个国家最近跳过了一整天)。