Mostrar datepicker al tocar en el campo de texto

¿Cómo puedo mostrar un control de selección de fecha y hora al tocar un cuadro de texto?

Tengo una interfaz de usuario que tiene campos de texto de llegada y salida, y cuando un usuario hace clic en el cuadro de texto de llegada, debe mostrar un control de selección de fecha y hora en lugar de un teclado y lo mismo con el cuadro de texto de salida.

Puede usar las propiedades inputView e inputAccessoryView del campo de texto para esto. Cree el selector de fecha y configúrelo en las vistas de entrada de los dos campos de texto. También cree otra vista para el botón Done y como su vista de accesorios. Necesitará ese botón para cerrar la vista de entrada.

El botón Done debe estar conectado para funcionar, lo que básicamente hace esto:

 if ( [textField1 isFirstResponder] ) { [textField1 resignFirstResponder]; } else if ( [textField2 isFirstResponder] ) { [textField2 resignFirstResponder]; } 

Otra opción sería la subclase UITextField y anular inputView e inputAccessoryView . Este es el camino a seguir cuando hay muchos de ellos.

Ejemplo

 @interface CustomKeyboardAppDelegate : NSObject  { ... @property (nonatomic, retain) IBOutlet UIWindow *window; @property (nonatomic, retain) IBOutlet UITextField *textField; @property (nonatomic, retain) IBOutlet UIToolbar *accessoryView; @property (nonatomic, retain) IBOutlet UIDatePicker *customInput; - (IBAction)dateChanged:(id)sender; - (IBAction)doneEditing:(id)sender; @end 

En el XIB, extraiga una UIToolbar y un UIDatePicker pero no los adjunte a la vista. Conecte los tomastreams apropiadamente. dateChanged: responde a los cambios en el selector de fecha y doneEditing: se doneEditing: cuando se Done clic en el botón Done en la barra de herramientas. Conéctelos también. Los métodos se implementan como se detalla a continuación.

 @implementation CustomKeyboardAppDelegate @synthesize window=_window; @synthesize textField = _textField; @synthesize accessoryView = _accessoryView; @synthesize customInput = _customInput; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.textField.inputView = self.customInput; self.textField.inputAccessoryView = self.accessoryView; ... } ... - (IBAction)dateChanged:(id)sender { UIDatePicker *picker = (UIDatePicker *)sender; self.textField.text = [NSString stringWithFormat:@"%@", picker.date]; } - (IBAction)doneEditing:(id)sender { [self.textField resignFirstResponder]; } @end 

Los dos últimos métodos se hincharán a medida que más campos de texto dependan de este seleccionador.

Muy simple, en ViewController.h pone el UITextFieldDelegate después en viewDidLoad .

 txtFecha.delegate = self; datePicker = [[UIDatePicker alloc]init]; [datePicker setDatePickerMode:UIDatePickerModeDate]; self.txtFecha.inputView = datePicker; 

En viewDidLoad of 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

Hay una clase realmente útil que encontré: la publicación del blog está aquí: http://www.pietrorea.com/2012/07/how-to-hide-the-cursor-in-a-uitextfield/, pero básicamente utiliza la entrada. / inputAccessory también. El truco es que el UILabel, al menos por lo que estaba haciendo, era exactamente lo que necesitaba.

abrir selector de fecha al hacer clic en textField swift 3.0 agregar UITextFieldDelegate y establecer delegate en ViewDidload () tfDate.delegate = self

 //MARK:- TextField Delegate //MARK:- func textFieldShouldReturn(_ textField: UITextField) -> Bool { textField.resignFirstResponder() return true } //MARK:- DatePicker //MARK:- func textFieldDidBeginEditing(_ textField: UITextField) { self.callDatePicker(textField: tfDate) } func callDatePicker(textField:UITextField){ let datePickerView : UIDatePicker = UIDatePicker() datePickerView.datePickerMode = UIDatePickerMode.date textField.inputView = datePickerView datePickerView.addTarget(self, action: #selector(MyViewController.handleDatePicker), for: .valueChanged) } var str:String = "" var str1:String = "" var strStartDate:Date! var strEndDate:Date! func handleDatePicker(sender: UIDatePicker) { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd-MM-yyyy" print("Date :: \(dateFormatter.string(from: sender.date))") tfDate.text = dateFormatter.string(from: sender.date) }