Sending arguments to gesture recognizer initialization selector?

12,842

Solution 1

The correct signature for the method to call would be:

-(void) PlanetTapped: (UIGestureRecognizer*)gestureRecognizer

then you could access the view that received the gesture by calling:

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

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

Indeed, this is what UIGestureRecognizer reference states:

A gesture recognizer has one or more target-action pairs associated with it. If there are multiple target-action pairs, they are discrete, and not cumulative. Recognition of a gesture results in the dispatch of an action message to a target for each of those pairs. The action methods invoked must conform to one of the following signatures:

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

Solution 2

- (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
}

hope these would help you.

Share:
12,842
Fitzy
Author by

Fitzy

Donate: Bitcoin: 18YFRUwQne2cPivXSGWL7AffoCK2qR71Bi Ethereum: 0xAD66D5F9BC59924152361ce4B58aA8fa63A9a9Ae

Updated on June 05, 2022

Comments

  • Fitzy
    Fitzy almost 2 years

    In my program, I have a UITapGestureRecognizer which I have initialized with initWithTarget: action:. I have passed in a selector to call a method by the name of PlanetTapped: (UIImageView *)aPlanet. This calls the method fine, however I would like to know how to pass arguments into action: like you would with performSelector: withObject. Is this popssible? It would make sense to allow you to send arguments to the UIGestureRecognizer's selector. Any help is appreciated.