2012-06-21 9 views
10

Estoy utilizando el código de abajocómo pasar argumentos a la acción en la acción UIGestureRecognizer initWithTarget

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(processTap)]; 

- (void) processTap 
{ 
//do something 
} 

pero necesito para enviar una función de los datos a processTap. ¿Hay alguna forma de hacer esto?

+0

creo que esto debería ayudar a salir: http: //stackoverflow.com/a/5035335/177136 – Ger

Respuesta

30

Ejemplo:

UIImageView *myPhoto = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@"tab-me-plese.png"]]; 
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(processTap:)]; 

[myPhoto setTag:1]; //set tag value 
[myPhoto addGestureRecognizer:tap]; 
[myPhoto setUserInteractionEnabled:YES]; 

- (void)processTap:(UIGestureRecognizer *)sender 
{ 
    NSLog(@"tabbed!!"); 
    NSLog(@"%d", sender.view.tag);  
} 
+4

Bienvenido al desbordamiento de la pila! Siempre trata de dar una explicación a tu código. –

+1

Si todo lo que necesita es el 'UIView' en el que se produjo el gesto, esta es una respuesta mal documentada pero válida. De lo contrario, debe combinarse con esta respuesta: http://stackoverflow.com/questions/11594610/objective-c-storing-hidden-information-into-a-uiview from @nielsbot – SwiftArchitect

+0

Este etiquetado es extremadamente útil para pasar UserData - no necesita hacer cálculos desordenados de ubicación ... – kfmfe04

3

Hay una buena respuesta a una pregunta similar en iOS - UITapGestureRecognizer - Selector with Arguments, pero si quieres para pasar datos que no desea adjuntar a la vista, recomiendo la creación de un segundo función que tiene acceso a los datos que necesita. Por ejemplo:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(passDataToProcessTap)]; 

- (void)passDataToProcessTap { 
    [self processTapWithArgument:self.infoToPass]; 
    // Another option is to use a static variable, 
    // Or if it's not dynamic data, you can just hard code it 
} 

- (void) processTapWithArgument:(id)argument { 
    //do something 
} 
Cuestiones relacionadas