Search code examples
iosobjective-cnsarrayuitapgesturerecognizer

Pass a NSDictionary as parameter to UITapGestureRecognizer


I want to pass a NSArray as a parameter to UITapGestureRecognizer and access it in downloadOptionPressed method. How can I do this ?

The NSArray

NSArray *parameters = [NSArray arrayWithObjects:currentTrack, nil];

Creating the UITapGestureRecognizer

UITapGestureRecognizer *downloadOptionPressed = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(timeFrameLabelTapped:)];
    [downloadOption addGestureRecognizer:downloadOptionPressed];

The downloadOptionPressed method

-(void)downloadOptionPressed:(UIGestureRecognizer*)recognizer{

}

Solution

  • Is there a reason you can't store the information in the owning view controller? Is it for abstraction?

    You can always extend UITapGestureRecognizer to carry more data:

    @interface UserDataTapGestureRecognizer : UITapGestureRecognizer
    @property (nonatomic, strong) id userData;
    @end
    
    @implementation UserDataTapGestureRecognizer
    @end
    

    ...

    UserDataTapGestureRecognizer *downloadOptionPressed =
        [[UserDataTapGestureRecognizer alloc] initWithTarget:self
        action:@selector(timeFrameLabelTapped:)];
    downloadOptionPressed.userData = parameters;
    

    ...

    - (void)downloadOptionPressed:(UserDataTapGestureRecognizer *)recognizer {
        NSArray *parameters = recognizer.userData;
    }