2012-05-11 9 views
11

En mi programa, tengo un UITapGestureRecognizer que he inicializado con initWithTarget: action:. He pasado un selector para llamar a un método con el nombre PlanetTapped: (UIImageView *)aPlanet. Esto llama al método bien, sin embargo, me gustaría saber cómo pasar argumentos al action:, como lo haría con performSelector: withObject. ¿Es esto posible? Tendría sentido permitirle enviar argumentos al selector UIGestureRecognizer. Cualquier ayuda es apreciada.¿Enviando argumentos al selector de inicialización del reconocedor de gestos?

Respuesta

13

La firma correcta para el método a llamar sería:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer 

entonces se podría acceder a la vista de que recibió el gesto llamando:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer { 

    UIImageView* aPlanet = gestureRecognizer.view; 
    ... 
} 

De hecho, esto es lo UIGestureRecognizer reference estados:

Un reconocedor de gestos tiene uno o más pares de acción de objetivo asociados. Si hay varios pares objetivo-acción, son discretos y no acumulativos. El reconocimiento de un gesto da como resultado el envío de un mensaje de acción a un objetivo para cada uno de esos pares. Los métodos de acción invocados deben cumplir con una de las siguientes firmas:

  • (void) handleGesture;
  • (void) handleGesture: (UIGestureRecognizer *) gestureRecognizer;
+0

Ahh, por supuesto. Debería haber pensado en eso. ¡Gracias por tu ayuda! – Fitzy

6
- (void)viewDidLoad 
{ 
UILongPressGestureRecognizer *longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressOnPhotos:)]; 
[yourView addGestureRecognizer:longPressRecognizer]; 
} 



- (IBAction)handleLongPressOnPhotos:(UILongPressGestureRecognizer *)sender{ 
// use "sender.view" to get the "yourView" you have long pressed 
} 

Esperamos que estos le ayudaría.

0

En Swift 3.0, la firma de la función es la siguiente (sustituir por otra clase gesto reconocedor según sea apropiado en estos ejemplos):

func myButtonLongTouch(_ sender: UILongPressGestureRecognizer) 

hace referencia a esta función cuando la configuración de los reconocedores Gesto de la siguiente manera:

longTouchGesture = UILongPressGestureRecognizer(target: self, action: #selector(myButtonLongTouch(_:))) 

Luego, para acceder a la vista (en mi caso, un botón) que se ha pulsado, utilice el código:

if let button = sender.view as? UIButton { 
    // Your code here 
} 

Por último, no hay que olvidar que esta función se llama varias veces (por lo general cuando se inicia el gesto y cuando termina), así que es conveniente para comprobar el estado, lo que se puede hacer de la siguiente manera:

if (sender.state == UIGestureRecognizerState.ended) { 
    // Your code here 
} 
Cuestiones relacionadas