2012-05-11 13 views
11

Nel mio programma, ho un UITapGestureRecognizer che ho inizializzato con initWithTarget: action:. Ho passato in un selettore per chiamare un metodo con il nome di PlanetTapped: (UIImageView *)aPlanet. Questo chiama bene il metodo, tuttavia mi piacerebbe sapere come passare argomenti in action: come si farebbe con performSelector: withObject. È possibile? Avrebbe senso consentire di inviare argomenti al selettore di UIGestureRecognizer. Qualsiasi aiuto è apprezzato.Invio di argomenti al selettore di inizializzazione del riconoscimento gestuale?

risposta

13

La firma corretta per il metodo da chiamare sarebbe:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer 

allora si potrebbe accedere alla visualizzazione che ha ricevuto il gesto chiamando:

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

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

In effetti, questo è ciò che UIGestureRecognizer reference stati:

Un riconoscitore di gesti ha una o più coppie di azioni di destinazione associate. Se esistono più coppie di azioni di destinazione, sono discrete e non cumulative. Il riconoscimento di un gesto comporta l'invio di un messaggio di azione a un target per ciascuna di tali coppie. I metodi di azione richiamati devono essere conformi a una delle seguenti firme:

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

Ah, certo. Avrei dovuto pensarci. Grazie per l'aiuto! – 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 
} 

auguriamo che questi vi aiutano.

0

In Swift 3.0, la firma funzione è la seguente (sostituire un'altra classe gesto riconoscitore a seconda dei casi in questi esempi):

func myButtonLongTouch(_ sender: UILongPressGestureRecognizer) 

si fa riferimento a questa funzione quando l'impostazione dei riconoscitori gesto come segue:

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

Poi, per accedere alla vista (nel mio caso, un pulsante) che è stato premuto, utilizzare il codice:

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

Infine, non dimenticare che questa funzione viene chiamata più volte (in genere quando inizia il gesto e quando finisce), quindi ti consigliamo di verificare lo stato, che si può fare come segue:

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