UIDatePicker minimumDate和maximumDate

时间:2016-02-16 14:35:31

标签: ios swift uidatepicker

我试图设置最小和最大日期来限制用户的选择,但它不起作用:

    override func viewDidLoad() {
        let datePickerView : UIDatePicker = UIDatePicker()
        datePickerView.datePickerMode = UIDatePickerMode.Date
        tfDateNaissance.inputView = datePickerView

        let gregorian: NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
        let currentDate: NSDate = NSDate()
        let components: NSDateComponents = NSDateComponents()

        components.year = -18
        let minDate: NSDate = gregorian.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!

        components.year = -150
        let maxDate: NSDate = gregorian.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!

        datePickerView.minimumDate = minDate
        datePickerView.maximumDate = maxDate


        datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)

        let pickerToolBar = UIToolbar()
        pickerToolBar.barStyle = UIBarStyle.Black //you can change the style
        pickerToolBar.translucent = true
        pickerToolBar.tintColor = UIColor.whiteColor() // or other colours
        pickerToolBar.sizeToFit()

        let spaceButtonPicker = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
        let cancelButtonPicker = UIBarButtonItem(title: "Ok", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelDatePicker:")
        pickerToolBar.setItems([cancelButtonPicker, spaceButtonPicker], animated: false)
        pickerToolBar.userInteractionEnabled = true
        tfDateNaissance.inputAccessoryView = pickerToolBar
}


    func datePickerValueChanged(sender: UIDatePicker) {
        let dateFormatter = NSDateFormatter()

        dateFormatter.dateFormat = "dd/MM/yyyy"

        //        dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
        //
        //        dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle

        tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)

    }

    func cancelDatePicker(sender: UIBarButtonItem){
        if tfProjet.isFirstResponder(){
            tfProjet.resignFirstResponder()
        } else if tfDateNaissance.isFirstResponder(){
            tfDateNaissance.resignFirstResponder()
        }
    }

我在堆栈溢出时发现此代码,我没有错误,但我可以选择2200作为例子年份。我认为这是因为它是一个输入视图,所以如何?

1 个答案:

答案 0 :(得分:0)

minDate晚于maxDate:

    components.year = -150
    let minDate: NSDate = gregorian.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!

    components.year = -18
    let maxDate: NSDate = gregorian.dateByAddingComponents(components, toDate: currentDate, options: NSCalendarOptions(rawValue: 0))!

    datePickerView.minimumDate = minDate
    datePickerView.maximumDate = maxDate