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.
Antworten
Zu viele Anzeigen?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;
- (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.
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
}