2015-07-14 6 views
7

W moim kodzie mam UITextField, który po kliknięciu użytkownika otwiera UIDatePicker, aby umożliwić użytkownikowi łatwe i wydajne przewijanie do ich daty urodzenia. Oczywiście nie chcemy, aby UIDatePicker przewijał do 2015 roku i tak jak obecnie. Ponieważ jest to pole wprowadzania daty urodzenia, musiałbym mieć możliwość ograniczenia wpisów do 16 lat +. Jak mam to zrobic?Ograniczanie UIDatePicker datuje się od określonego czasu. Takich jak wejście DOB do ograniczonego limitu wiekowego

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 

Odpowiedz

24

Można użyć dateByAddingUnit i odjąć 16 lat od aktualnej daty, aby ustawić maksymalny termin dla Datepicker następująco:

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

Xcode 8 beta 6 • Swift 3

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

UIDatePicker ma maximumDate, którą można ustawić. Wystarczy ustawić tryb „Data” w IB i dodać: datePicker.maximumDate = NSDate(timeIntervalSinceNow: -504911232)

-504911232 oznacza 16 przed Dzisiaj (rachunkowość lata przestępne)

+0

Nie, to nie znaczy, że. 504489600 to 15 lat, 11 miesięcy i 25 dni. Podpowiedź: lata przestępne. I dlatego nie robisz dat obliczeń za pomocą sekund. –

+0

Zmieniono to na około 4 dni przestępne – BobRon

+0

Poza wynalezieniem NSCalendar możesz spróbować czegokolwiek, nie będziesz mógł tego naprawić. Sekund nie można użyć, jeśli chcesz opisać względny czas, który trwa dłużej niż godzinę. Przy odpowiednim kalendarzu nie można uwzględniać czasu letniego, lat przestępnych ani pominiętych dni (jest przynajmniej jeden kraj, który niedawno opuścił cały dzień). –

Powiązane problemy