Mostrar datepicker en el campo de text

Soy muy nuevo en iOS así que obviamente me estoy perdiendo algunos conceptos cuando trato de seguir esta solución Mostrar datepicker al tocar en el campo de text a mi problema.

Tengo la interfaz y la implementación en una class llamada DatepickerAppDelegate, pero estoy perdido aquí:

"En el XIB, extraiga una barra UITool y un UIDatePicker, pero no la conecte a la vista. Conecte las salidas apropiadamente. DateChanged: responde a los cambios en el datepicker y finaliza la edición: se invoca cuando el button Listo en la barra de herramientas es presionado. Conéctelos también. Los methods se implementan como se detalla a continuación. "

Leí algo sobre los XIB, pero estoy usando un guión gráfico, así que creo que no tengo entonces. Además, no estoy seguro de cómo se supone que debo extraer elementos sin adjuntarlo a mis controlleres de vista (lo estoy intentando, pero cuando suelto el button del mouse, la herramienta vuela de nuevo a la barra de herramientas) Ni siquiera entiendo por qué necesito un UIToolbar.

Y finalmente, ¿cómo conecto mi campo de text al delegado de datepicker?

¿Alguien me puede ayudar?

ACTUALIZAR:

De hecho, es muy simple, solo necesito:

datePicker = [[UIDatePicker alloc] init]; datePicker.datePickerMode = UIDatePickerModeDate; [datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged]; self.birthday.inputView = datePicker; 

UIResponder , del que UITextField henetworkinga, define una propiedad llamada inputView . Esta propiedad (una UIView * ) puede definir una vista que se mostrará en lugar del keyboard cuando ese UIResponder convierta en el primer respondedor.

Por lo tanto, si quiere que aparezca un UIDatePicker cuando toca en un campo de text (es decir, hace que ese campo de text sea el primer respondedor), entonces puede decir ingenuamente:

 UIDatePicker *datePicker = [[UIDatePicker alloc] init...]; ... configure datePicker ... [myTextField setInputView:datePicker]; 

Ahora, cuando se UITextField su UITextField , se UIDatePicker un UIDatePicker su lugar.

SIN EMBARGO

Querrá hacer más que esto, ya que necesitará manejar diferentes orientaciones y diferentes expresiones idiomáticas.

Pero esa es la idea básica.

(Y si desea una barra de herramientas por encima del UIDatePicker , eso es lo que la propiedad inputAccessoryView es para …)

En viewDidLoad de ViewController.m

 - (void)viewDidLoad { [super viewDidLoad]; UIDatePicker *datePicker = [[UIDatePicker alloc]init]; [datePicker setDate:[NSDate date]]; datePicker.datePickerMode = UIDatePickerModeDate; [datePicker addTarget:self action:@selector(dateTextField:) forControlEvents:UIControlEventValueChanged]; [txtFieldBranchYear setInputView:datePicker]; } 

Agregue un método en su ViewController

 -(void) dateTextField:(id)sender { UIDatePicker *picker = (UIDatePicker*)txtFieldBranchYear.inputView; [picker setMaximumDate:[NSDate date]]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; NSDate *eventDate = picker.date; [dateFormat setDateFormat:@"dd/MM/yyyy"]; NSString *dateString = [dateFormat stringFromDate:eventDate]; txtFieldBranchYear.text = [NSString stringWithFormat:@"%@",dateString]; } 

txtFieldBranchYear es una salida de UITextField

Agregue una vista de datepicker y uitoolbarview a su vista. Por ejemplo

 CGFloat toolbarHeight = 44.f; CGFloat datePickerHeight = 140.f; CGFloat containerViewHeight = toolbarHeight+datePickerHeight; //create container view for datepicker and toolbar UIView *containerView = [[UIVIew alloc] initWithFrame:CGRectMake(0.f, [self.view bounds].size.height+containerViewHeight, [self.view bounds].size.width, containerViewHeight)]; //after init toolbar set the frame toolBar.frame = CGRectMake(0.f,0.f,containerView.frame.size.width, toolbarHeight]; //then add on toolbar button save and release it after add //after init datePicker set the frame datePicker.frame = CGRectMake(0.f, toolbarHeight, containerView.frame.size.width, datePickerHeight); //add datePicker and toolBar to containerView [containerView addSubview: toolBar]; [containerView addSubview: datePicker]; [toolBar release]; [datePicker release]; //add containerView to main view [self.view addSubview: containerView]; [containerView release]; 

Entonces, cuando la vista cargó están ocultos, Y de contener la vista está fuera del marco de vista.

Ahora debe asignar el delegado de propiedad de UITextFieldDelegate

 textfield.delegate = self; 

En el método delegate textFieldDidBeginEditing, ver UITextFieldDelegate , debe disparar el método que mostrará su date y barra de herramientas. Si tiene muchos campos de text para definir cuál se seleccionó, use la propiedad de label , que es integer y puede usar el interruptor en lugar de muchos si las condiciones.

Para mostrar su DatePicker y la barra de herramientas, debe cambiar la Y del marco containerView. Aquí es cómo hacer eso

 CGRect containerViewFrame = containerView.frame; containerViewFrame.y -=containerViewHeight; containerView.frame = containerViewFrame; 

Para ocultar simplemente más la variable containerViewHeight. Puede usar UIViewAnimations para mostrarlo con alguna animation. Por ejemplo, UIViewAnimationCurveEaseInOut