UITapGestureRecognizer selector, sender is the gesture, not the ui object

后端 未结 4 617
难免孤独
难免孤独 2021-01-31 07:47

I have a series of imageviews that I identify using their tag. I have added a single tap gesture to the images.

UITapGestureRecognizer *singleTap = [[UITapGest         


        
相关标签:
4条回答
  • 2021-01-31 08:13

    I figured out how to get the tag, which was the most important part of the question for me. Since the gesture is the sender, I figured out the the view it is attached to is sent along with it:

    [(UIGestureRecognizer *)sender view].tag
    

    I am still curious if anyone can tell me how to send an argument through a UITapGestureRecognizer selector.

    0 讨论(0)
  • 2021-01-31 08:24

    If you need distinct functionality for the handler you might check out the BlocksKit project and this file in particular. The project is a CocoaPods project so you can install it easily into your toolchain.

    An example from the first referenced code file:

    UITapGestureRecognizer *singleTap = [UITapGestureRecognizer recognizerWithHandler:^(id sender) {
         NSLog(@"Single tap.");
     } delay:0.18];
     [self addGestureRecognizer:singleTap];
    

    This could effectively allow you to setup a gesture recognizer easily for each image.

    0 讨论(0)
  • 2021-01-31 08:27

    From @dysan819 answer, I manage to get object without tag. In my case is UILabel.

    - (void)labelTap:(id)sender {
        NSLog(@"tap class: %@", [[(UIGestureRecognizer *)sender view] class]);
        if ([[(UIGestureRecognizer *)sender view] isKindOfClass:[UILabel class]]) {
            UILabel *lb = (UILabel*)[(UIGestureRecognizer *)sender view];
            NSLog(@"tap: %@", lb.text);
        }
    }
    
    0 讨论(0)
  • 2021-01-31 08:31

    The only argument you can send through UITapGestureRecognizer selector is the UITapGestureRecognizer itself as following:

    Make sure to put ":" after the selector name like you previously did :

    UITapGestureRecognizer *singleTap = 
    [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(selectImage:)];
    

    Then add a parameter to selectImage so you can retrieve the View as following:

    -(void) selectImage:(UITapGestureRecognizer *)gestureRecognizer{
    
        //Get the View
        UIImageView *tableGridImage = (UIImageView*)gestureRecognizer.view;
    }
    
    0 讨论(0)
提交回复
热议问题