2012-08-08 11 views
32

Me di cuenta de que no hay un delegado para observar los cambios en UIDatePicker. ¿Hay alguna manera de detectar cuándo se realiza un cambio en el selector sin confirmar nada, como el momento en que gira y aterriza en un nuevo número que quiero poder detectar? Pensé en el valor de observación clave, pero no creo que hay una propiedad que cambia en el actoObservando el cambio en UIDatePicker

Respuesta

38

Ir a IB y arrastre desde el UIDatePicker a su archivo .h. Luego seleccione enter image description here

Maneje esto como lo desee en su archivo .m; XCode agregará el método a continuación para usted.

enter image description here

+0

Por supuesto es la solución más fácil que ni siquiera consideré. Gracias hombre – Chris

55

es necesario agregar a su UIDatePicker caso UIControlEventValueChanged para manejar los cambios de fecha:

[myDatePicker addTarget:self action:@selector(dateIsChanged:) forControlEvents:UIControlEventValueChanged]; 

A continuación, la puesta en práctica :

- (void)dateIsChanged:(id)sender{ 
    NSLog(@"Date changed"); 
} 
+1

Buena respuesta, soy demasiado perezoso para estas cosas programática. Tenga en cuenta que necesitará una referencia al selector de fecha para hacer esto, que no necesariamente tendría si lo hubiera creado en IB (aunque podría agregarlo fácilmente). – Dustin

+1

versión Swift: 'picker.addTarget (sí, la acción: #selector (dateChanged), forControlEvents: .ValueChanged) @objc func dateChanged (remitente: UIDatePicker) { de impresión (sender.date.description) }' –

2

Aquí se presenta una propuesta para un selector de fecha de MVA-compatible:

@interface LNKVODatePicker : UIDatePicker 

@end 

@implementation LNKVODatePicker 

- (void)willMoveToWindow:(UIWindow *)newWindow 
{ 
    [super willMoveToWindow:newWindow]; 

    [self removeTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 

    if(newWindow != nil) 
    { 
     [self addTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 
    } 
} 

- (void)dealloc 
{ 
    [self removeTarget:self action:@selector(_didChangeDate) forControlEvents:UIControlEventValueChanged]; 
} 

- (void)_didChangeDate 
{ 
    [self willChangeValueForKey:@"date"]; 
    [self didChangeValueForKey:@"date"]; 
} 

@end 
Cuestiones relacionadas