2011-05-25 12 views
8

Lo que quiero hacer es configurar un grupo de objetos UIControl para enviar todos los eventos a través del mismo controlador. Ese controlador que necesita determinar qué acción adecuada se basa en el tipo UIControlEvents que se desencadenó.¿Cómo puedo determinar qué tipo de UIControlEvents causó un UIEvent?

- (void)handleEventFromControl:(id)sender withEvent:(UIEvent *)event { 
    UIControl *control = sender; 
    NSIndexPath *indexPath = [controlIndexPaths objectForKey:control]; 
    UIControlEvents controlEventType = event.type; //PROBLEM HERE 

    BOOL fire = NO; 
    NSNumber *eventCheck = [registeredEventsByToolkitIndex objectAtIndex:indexPath.toolkit]; 
    fire = ([eventCheck integerValue] & controlEventType); 

    if(!fire) { 
     eventCheck = [registeredEventsByControlIndex objectAtIndex:indexPath.control]; 
     fire = ([eventCheck integerValue] & controlEventType); 
    } 

    if(!fire) { 
     eventCheck = [registeredEventsByIndexPath objectForKey:indexPath]; 
     fire = ([eventCheck integerValue] & controlEventType); 
    } 

    if(fire) { 
     [self.delegate toolkit:self indexPath:indexPath firedEvent:event]; 
    } 
} 

Lo mejor que puedo decir, event.type no funciona de esta forma. Quiero evitar tener una subclase de UIControl porque eso es una sobrecarga grave para lo que quiero hacer. El resto de las partes móviles aquí no son tan importantes; lo que quiero es una manera de comprobar contra UIControlEvents después de que ambos target:action: se utiliza en la siguiente configuración:

- (void)addTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents 

Si hay una manera diferente a la configuración de un target:action: que devuelve la UIControlEvents, me gustaría tener que . Pero no lo veo en la documentación. O, como mínimo, obtenga acceso fuera del del objeto UIControl, de modo que pueda obtener el tipo que deseo.

+1

posible duplicado de http://stackoverflow.com/questions/2437875/target-action-uicontrolevents – albertamg

+0

@albertamg: Sí, esa pregunta cubre exactamente el mismo terreno que este. Cualquier votante que pase, adelante y cierre esto. – MrHen

Respuesta

16

Estás en lo correcto; UIEvent.type no funciona de esa manera. Internamente, las subclases UIControl básicamente usan el método sendActionsForControlEvents:, lo que significa que pueden elegir poner lo que quieran como parámetro.

En cuanto a cómo saber, la respuesta simple es tener un método separado para cada evento de control.

Cuestiones relacionadas