2016-03-22 15 views
3

enter image description here Ich habe zwei Felder namens Datum und Uhrzeit. Ich schaffe picker durch diesen Code mitGet Time Von manuellen datePicker Nach ausgewähltem Datum Swift

var selectedDate : NSDate! 
func date_picker2(textField: UITextField) 
    { 
     var toolbar1:UIToolbar = UIToolbar(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, 40)) 
     var done:UIBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target:self, action: Selector("cancelBtnClicked1:")) 
     done.tag = 203 
     var cancel:UIBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("cancelBtnClicked1:")) 

     cancel.tag = 202 


    var space:UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 
    toolbar1.items = [cancel,space,done] 
    toolbar1.barTintColor = UIColor(red: 23.0/255.0, green: 174.0/255.0, blue: 202.0/255.0, alpha: 1) 
    toolbar1.tintColor = UIColor.whiteColor() 
    txt_Dob.inputAccessoryView = toolbar1 
    txt_birthTime.inputAccessoryView = toolbar1 

    datePicker = UIDatePicker(frame: CGRectMake(toolbar1.frame.size.width - 65, 0, 0, 300)) 
    let currentCalendar = NSCalendar.currentCalendar() 

    let dateComponents = NSDateComponents() 
    dateComponents.year = -80 
    datePicker.maximumDate = NSDate() 


    if txt_Dob.isFirstResponder() 
    { 
     datePicker.datePickerMode = UIDatePickerMode.Date 
    } 
    if txt_birthTime.isFirstResponder() 
    { 
     datePicker.datePickerMode = UIDatePickerMode.Time 
     println("selectedDate: \(selectedDate)") 
     if selectedDate == NSDate(){ 
      datePicker.maximumDate = NSDate(timeIntervalSinceNow:0) 
     } 
    } 

    datePicker.timeZone = NSTimeZone.localTimeZone() 
    datePicker.locale = NSLocale.currentLocale() 
    datePicker.calendar = NSCalendar.currentCalendar() 
    datePicker.backgroundColor = UIColor.whiteColor() 
    txt_Dob.inputView = datePicker 
    txt_birthTime.inputView = datePicker 
} 

func cancelBtnClicked1(sender:UIButton!) 
{ 
    var btnTag = sender.tag 

    if btnTag == 203 
    { 
     if(txt_Dob.isFirstResponder()) 
     { 
      if sender.tag == 203 
      { 
       var dateFormatter = NSDateFormatter() 
       dateFormatter.dateFormat = "dd-MM-yyyy" 
       txt_Dob.text = dateFormatter.stringFromDate(datePicker.date) 

      } 
     } 
     else if(txt_birthTime.isFirstResponder()) 
     { 
      if sender.tag == 203 
      { 
       var dateFormatter = NSDateFormatter() 
       dateFormatter.dateFormat = "HH:mm" 
       txt_birthTime.text = dateFormatter.stringFromDate(datePicker.date) 
       } 
     } 
     txt_Dob.resignFirstResponder() 
     txt_birthTime.resignFirstResponder() 
    } 
    else 
    { 
     self.view.endEditing(true) 
    } 
} 

jetzt will ich, dass, wenn ich die heutige Datepicker bin Auswahl erlauben sollte mir Zeit, bis jetzt zu nehmen, aber wenn ich Datum am Tag vor gestern wählen wird, sollte es erlauben Sie mir, Nimm dir Zeit.

Ich bekomme nicht, wie man das macht. Kann mir jemand vorschlagen, wie ich das mache?

Dank ..

Antwort

2

einfach das maximale Datum bei Timepicker und Spiel für das aktuelle Datum aktualisieren, wie:

dateComponents.hour = 23 
dateComponents.minute = 59 
dateComponents.second = 59 

datePicker.maximumDate = currentCalendar?.dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions()) 

if txt_Dob.isFirstResponder() 
{ 
    datePicker.datePickerMode = UIDatePickerMode.Date 
} 
if txt_birthTime.isFirstResponder() 
{ 
    datePicker.datePickerMode = UIDatePickerMode.Time 
    if selectedDate == NSDate(){ 
    datePicker.maximumDate = NSDate(timeIntervalSinceNow:0) 
    } 
} 

Sie haben selectedDate zu aktualisieren, wenn Benutzer das Datum von txt_Dob Datumsauswahl auswählt.

if(txt_Dob.isFirstResponder()) 
    { 
     if sender.tag == 203 
     { 
      var dateFormatter = NSDateFormatter() 
      dateFormatter.dateFormat = "dd-MM-yyyy" 
      txt_Dob.text = dateFormatter.stringFromDate(datePicker.date) 
      selectedDate = datePicker.date 
      txt_birthTime.text = "" 
     } 
    } 
+0

nein .. es ist mir nicht erlaubt, jederzeit zu wählen. Im Moment wähle ich Zeit in PM. aber es ist nicht erlaubt @ Muhammad Yawar Ali –

+0

Ich habe meinen Code aktualisiert, wie Sie gesagt haben .. @Muhammad Yawar Ali –

+0

Aktualisieren Sie die selectedDate Variable mit Datum aus dem txt_Dob Datepicker ausgewählt? Wenn Sie nur timepicker testen möchten, kommentieren Sie die if-Bedingung für selectedDate und überprüfen Sie. –