2012-05-11 6 views
11

In meinem Programm habe ich eine UITapGestureRecognizer die ich mit initWithTarget: action: initialisiert habe. Ich habe in einem Selektor übergeben, um eine Methode mit dem Namen PlanetTapped: (UIImageView *)aPlanet aufzurufen. Dies nennt die Methode in Ordnung, aber ich würde gerne wissen, wie man Argumente in action: wie Sie mit performSelector: withObject übergeben würde. Ist das möglich? Es würde Sinn machen, dass Sie Argumente an den Selektor UIGestureRecognizer senden können. Jede Hilfe wird geschätzt.Senden von Argumenten an den Selektor der Gestenerkennung?

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer 

dann könnte man die Ansicht, dass die Geste durch den Aufruf erhalten Zugang:

Antwort

13

Die richtige Signatur für das Verfahren wäre zu nennen Tat

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

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

, ist es das, was UIGestureRecognizer reference heißt es:

Einem Gestenerkenner sind ein oder mehrere Zielaktionspaare zugeordnet. Wenn es mehrere Ziel-Aktion-Paare gibt, sind sie diskret und nicht kumulativ. Die Erkennung einer Geste führt zum Versenden einer Aktionsnachricht an ein Ziel für jedes dieser Paare. Die aufgerufenen Aktionsmethoden müssen einer der folgenden Signaturen entsprechen:

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

Ahh natürlich. Ich hätte daran denken sollen. Danke für Ihre Hilfe! – 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 
} 

hoffen, dass diese Ihnen helfen würde.

0

In Swift 3.0 ist die Funktion Unterschrift ist wie folgt (substituieren andere Gestenerkenner Klasse entsprechend in diesen Beispielen):

func myButtonLongTouch(_ sender: UILongPressGestureRecognizer) 

Sie diese Funktion verweisen, wenn Ihre Geste Recognizers Einrichtung wie folgt:

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

Dann, um die Ansicht zugreifen (in meinem Fall eine Taste), die gedrückt wurde, verwenden Sie den Code:

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

Schließlich, vergessen Sie nicht, dass diese Funktion mehrmals aufgerufen wird (in der Regel, wenn die Geste beginnt und wann sie endet), so dass Sie den Zustand überprüfen möchten werden, die Sie wie folgt tun:

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