Usando el mismo UIDatePicker para dos campos de texto
Frecuentes
Visto 4,078 veces
4
Tengo dos campos de texto, desde la fecha y hasta la fecha. Cómo obtener fechas diferentes del mismo selector de fechas. Intenté algo que terminó obteniendo la misma fecha en ambos campos de texto cuando se cambia la fecha.
-(IBAction)dateValueChanged:(id)sender
{
UIDatePicker *picker = (UIDatePicker *)sender;
NSDate *dateSelected1 = [picker date];
NSDate *dateSelected2 = [picker date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
self.fromTextField.text = [dateFormatter stringFromDate:dateSelected1];
self.toTextField.text = [dateFormatter stringFromDate:dateSelected2];
}
3 Respuestas
7
Una forma más elegante disponible de implementar esto sin UITextFieldDelegate
y textFieldDidBeginEditing:
solo con verificar firstResponder
- (IBAction)dateValueChanged:(id)sender
{
NSDate *dateSelected = [picker date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
if ([firstTextField isFirstResponder])
{
firstTextField.text = [dateFormatter stringFromDate:dateSelected];
}
else if ([self.endTextField isFirstResponder])
{
secondTextField.text = [dateFormatter stringFromDate:dateSelected];
}
}
Respondido 03 ago 15, 09:08
4
Podrías implementar el UITextFieldDelegate
Protocolo para ambos campos de texto textFieldDidBeginEditing:
Método junto con el establecimiento de la tag
propiedad para cada TextField para que sean fácilmente identificables...
Entonces cuando textFieldDidBeginEditing:
se llama, puede leer la etiqueta del campo de texto que ha comenzado a editarse y configurarlo como un valor global para que pueda averiguar qué campo de texto debe cambiar el selector de fecha. Ejemplo:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
someGlobalNSInteger = textField.tag; //the current text field tag is now globally set
}
-(IBAction)dateValueChanged:(id)sender {
UIDatePicker *picker = (UIDatePicker *)sender;
NSDate *dateSelected1 = [picker date];
//NSDate *dateSelected1 = [picker date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
//self.fromTextField.text = [dateFormatter stringFromDate:dateSelected1];
//self.toTextField.text = [dateFormatter stringFromDate:dateSelected2];
UITextField *activeTextField = (UITextField*)[self viewWithTag:someGlobalNSInteger]; //gets text field what is currently being edited
[activeTextField setText:[dateFormatter stringFromDate:dateSelected1]];
}
Sin embargo, si no está permitiendo que el campo de texto sea editable (por lo que no puede abrir el teclado), es posible que necesite alguna otra forma de averiguar qué campo de texto debería obtener la fecha actualizada, pero se lo dejaré a usted.
Espero eso ayude
contestado el 03 de mayo de 12 a las 11:05
1
La mejor manera de lograr esto es usar la propiedad inputview disponible en UITextField. Inicialice su selector de fecha una vez usando Outlet o programando y asígnelo como inputView en el método de delegado del campo de texto "textFieldDidBeginEditing:". Para asignar la fecha, puede usar su propia lógica comercial antes de asignar la vista de entrada al campo de texto.
contestado el 03 de mayo de 12 a las 13:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas ios objective-c xcode uitextfield uidatepicker or haz tu propia pregunta.
textField.tag es int y cuando se asigna a NSInteger muestra una advertencia. - ichanduu