11 Stimmen

Argumente an den Gestenerkenner-Initialisierungsselektor senden?

In meinem Programm habe ich eine UITapGestureRecognizer die ich mit folgenden Werten initialisiert habe initWithTarget: action: . Ich habe einen Selektor zum Aufruf einer Methode mit dem Namen PlanetTapped: (UIImageView *)aPlanet . Dies ruft die Methode gut auf, aber ich würde gerne wissen, wie man Argumente in action: wie Sie es bei performSelector: withObject . Ist das möglich? Es wäre sinnvoll, dass Sie Argumente an die UIGestureRecognizer den Selektor. Jede Hilfe ist willkommen.

13voto

sergio Punkte 68479

Die korrekte Signatur für die aufzurufende Methode würde lauten:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer

können Sie auf die Ansicht zugreifen, die die Geste erhalten hat, indem Sie sie aufrufen:

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

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

Das ist in der Tat das, was UIGestureRecognizer-Referenz Staaten:

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

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

6voto

lu yuan Punkte 7177
- (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
}

Ich hoffe, dass sie Ihnen helfen werden.

0voto

Mario Hendricks Punkte 667

In Swift 3.0 lautet die Funktionssignatur wie folgt (ersetzen Sie in diesen Beispielen eine andere Gestenerkennungsklasse):

func myButtonLongTouch(_ sender: UILongPressGestureRecognizer)

Sie referenzieren diese Funktion, wenn Sie Ihre Gestenerkenner wie folgt einrichten:

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

Um dann auf die Ansicht (in meinem Fall eine Schaltfläche) zuzugreifen, die gedrückt wurde, verwenden Sie den Code:

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

Vergessen Sie nicht, dass diese Funktion mehrmals aufgerufen wird (typischerweise zu Beginn und am Ende der Geste), so dass Sie den Status wie folgt überprüfen können:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X