UIDatePicker con el button "hecho"

Necesito agregar un button "hecho" a mi datepicker como en esta image:

introduzca la descripción de la imagen aquí

Este es mi código:

-(IBAction)chooseDate:(id)sender{ self.datepicker= [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; self.datepicker.datePickerMode = UIDatePickerModeDate; datepicker.backgroundColor = Rgb2UIColor(52, 170, 220); [self.btnDone addTarget:self action:@selector(SetDatePickerTime:) forControlEvents:UIControlEventTouchDown]; [self.view addSubview:self.datepicker]; } 

Cree un selector de date, luego agréguelo como la vista de input del campo en cuestión ( self.fieldInQuestion.inputView = datePicker ). A continuación, cree un UIToolBar (altura 44) con el elemento UIBarButton en él con el título "Listo", objective de uno mismo y un selector (por ejemplo, @selector (hecho)). Agregue esto como la vista de accesorios de input del mismo campo. Hizo que el selector de date sea una vista de input para ( self.fieldInQuestion.inputAccessoryView = UIToolbarInstance ). En el método selector (- (vacío) realizado en el ejemplo anterior), asegúrese de usar [self.fieldInQuestion resignFirstResponder] y lo descartará.

Con Swift

 // Place this code inside your ViewController or where you want ;) var txtField: UITextField = UITextField(frame: CGRectMake(0, 0, 200, 50)) // the formatter should be "compliant" to the UIDatePickerMode selected below var dateFormatter: NSDateFormatter { let formatter = NSDateFormatter() // customize the locale for the formatter if you want //formatter.locale = NSLocale(localeIdentifier: "it_IT") formatter.dateFormat = "dd/MM/yyyy" return formatter } override func viewDidLoad() { super.viewDidLoad() // date picker setup let datePickerView:UIDatePicker = UIDatePicker() // choose the mode you want // other options are: DateAndTime, Time, CountDownTimer datePickerView.datePickerMode = UIDatePickerMode.Date // choose your locale or leave the default (system) //datePickerView.locale = NSLocale.init(localeIdentifier: "it_IT") datePickerView.addTarget(self, action: "onDatePickerValueChanged:", forControlEvents: UIControlEvents.ValueChanged) txtField.inputView = datePickerView // datepicker toolbar setup let toolBar = UIToolbar() toolBar.barStyle = UIBarStyle.Default toolBar.translucent = true let space = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Done, target: self, action: "doneDatePickerPressed") // if you remove the space element, the "done" button will be left aligned // you can add more items if you want toolBar.setItems([space, doneButton], animated: false) toolBar.userInteractionEnabled = true toolBar.sizeToFit() txtField.inputAccessoryView = toolBar self.view.addSubview(txtField) } func doneDatePickerPressed(){ self.view.endEditing(true) } func onDatePickerValueChanged(datePicker: UIDatePicker) { self.txtField = dateFormatter.stringFromDate(datePicker.date) } 

La image de reference de su pregunta muestra que la aplicación está utilizando UIToolbar y asumiré que al tocar en el campo de text de date, aparecerá el gráfico de date con el button hecho. Y para esto en algún file .h

 /*****keyboard Done button ***/ #import <UIKit/UIKit.h> @interface ViewController : UIViewController { IBOutlet UIDatePicker *picker1; IBOutlet UITextField *txtFld; } @property (nonatomic, retain) UIToolbar *keyboardToolbar; @end 

en el file some.m

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; picker1=[[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 300)];//frames are just for demo [txtFld setInputView:picker1]; } - (void)keyboardWillShow:(NSNotification *)notification { if(keyboardToolbar == nil) { keyboardToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 410, 320, 44)] ; [keyboardToolbar setBarStyle:UIBarStyleBlackTranslucent]; [keyboardToolbar sizeToFit]; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.4]; UIBarButtonItem *flexButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; UIBarButtonItem *doneButton1 =[[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(resignKeyboard)]; NSArray *itemsArray = [NSArray arrayWithObjects:flexButton,doneButton1, nil]; [keyboardToolbar setItems:itemsArray]; [txtFld setInputAccessoryView:keyboardToolbar]; [self.view addSubview:keyboardToolbar]; [UIView commitAnimations]; } } -(void)resignKeyboard { [keyboardToolbar removeFromSuperview]; [txtFld resignFirstResponder]; ///do nescessary date calculation here } 

introduzca la descripción de la imagen aquí

¡¡¡¡HAGO!!!!

 -(IBAction)ChooseDate:(id)sender{ btnDone = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [done setTitle:@"GO!" forState:UIControlStateNormal]; btnDone.backgroundColor = UIColorFromRGB(0x1F1F21); btnDone.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); [btnDone addTarget:self action:@selector(HidePicker:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btnDone]; self.datepicker= [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 0, 320, 216)]; self.datepicker.datePickerMode = UIDatePickerModeDate; datepicker.backgroundColor = Rgb2UIColor(52, 170, 220); [self.view addSubview:self.datepicker]; } -(IBAction)HidePicker:(id)sender{ [UIView animateWithDuration:0.5 animations:^{ datepicker.frame = CGRectMake(0, -250, 320, 50); } completion:^(BOOL finished) { [datepicker removeFromSuperview]; [btnDone removeFromSuperview]; }]; [self.datepicker removeFromSuperview]; NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init]; [outputFormatter setDateFormat:@"ddMMyyyy"]; //NSLOG NSLog(@"%@",[outputFormatter stringFromDate:self.datepicker.date]); 

}

cree una UIView y añádala a la vista principal. Agregue un UIDatePicker a la nueva UIView. Agregue dos botones UIB a la vista UIV.