Usando el mismo UIDatePicker para dos campos de texto

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];
}

preguntado el 03 de mayo de 12 a las 11:05

3 Respuestas

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

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

textField.tag es int y cuando se asigna a NSInteger muestra una advertencia. - ichanduu

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 or haz tu propia pregunta.