2011-04-21 12 views
8

Sé que UIPickerViews utiliza un método didSelectRow para actualizar etiquetas, etc. cuando se selecciona una fila.UIDatePicker Método DidSelectRow?

Tengo un UIDatePicker que actualiza una etiqueta cuando se selecciona una fila y se presiona el botón, pero también quiero un UILabel que se actualice con cada selección, por lo que su actualización en vivo a medida que el usuario cambia la fecha. Sin embargo, no puedo encontrar ningún método como didSelectRow para el selector de fecha. ¿Cómo es esto posible?

- (IBAction)dateButtonPressed 
{ 
    [dateView setFrame:CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, self.view.frame.size.height)]; 
    [self.view addSubview:dateView]; 

    UIBarButtonItem *acceptButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(dismssPickerChangeDate)]; 
    self.navigationItem.rightBarButtonItem = acceptButton; 
    [acceptButton release]; 

    UIBarButtonItem *cancelButton1 = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismssPickerCancel)]; 
    self.navigationItem.leftBarButtonItem = cancelButton1; 
    [cancelButton1 release]; 

    self.navigationItem.title = @"Select Date"; 
    self.navigationItem.hidesBackButton = YES; 
    [UIView animateWithDuration:.5 animations:^{ 
     [dateView setFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    }]; 
    NSDate *myDate = picker.date; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    //NSDate *date = [NSDate date]; 
    [dateFormatter setDateFormat:@"MMM d y"]; 
    NSString *dateString = [dateFormatter stringFromDate:myDate]; 
    NSLog(@"New Date is = %@",dateString); 
    dateLabel.text = dateString; 
} 

Respuesta

25

UIDatePicker es un uicontrol, a fin de utilizar

[picker addTarget:yourController action:@selector(yourAction:) forControlEvents:UIControlEventValueChanged]; 

para enviar un mensaje a su controlador. El controlador puede obtener el estado del selector de fecha y actualizar la etiqueta.

Si el selector y la etiqueta son los dos puntos de venta de la misma clase, en viewDidLoad:

[self.picker addTarget:self action:@selector(updateLabelFromPicker:) forControlEvents:UIControlEventValueChanged]; 

A continuación, cree updateLabelFromPicker:

- (IBAction)updateLabelFromPicker:(id)sender { 
    self.label.text = [self.dateFormatter stringFromDate:self.picker.date];  
} 

querrá encontrar un NSDateFormatter para hacer la fecha bastante .

+0

Gracias Terry, estoy un poco confundido como qué hacer con "su controlador". Actualmente solo tengo una salida para datePicker y dateLabel que quiero actualizar en tiempo real. –

+0

Lo actualicé con más detalle. La clase en la que has declarado tus puntos de venta es tu controlador. –

+0

Tengo toda la configuración de NSFormatter porque tengo otra etiqueta que se actualiza después de que el usuario presiona, así que solo tengo que configurarla como tiempo real. Déjame jugar con el código que publicaste, gracias. –

1

Un selector de fechas hace las cosas un poco diferente. De la documentación:

Cuando se configura correctamente, un objeto UIDatePicker envía un mensaje de acción cuando un usuario termina de girar una de las ruedas para cambiar la fecha o la hora; el evento de control asociado es UIControlEventValueChanged.

Como UIDatePicker hereda de UIControl, tiene acceso a todos los eventos táctiles que cabría esperar (TouchUpInside, etc.).

Cuestiones relacionadas