Pregunta

Interface:

@interface MyViewController : UIViewController <UIGestureRecognizerDelegate> 

Implementation:

- (void)dismissPopup {
    NSLog(@"popup view dismissed");
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer 
           shouldReceiveTouch:(UITouch *)touch {

    return touch.view == self.view;
}

-(void)viewDidLoad
{
    [super viewDidLoad];

    UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] 
            initWithTarget:self action:@selector(dismissPopup)];

    tapRecognizer.numberOfTapsRequired = 1;
    tapRecognizer.delegate = self;
    [self.view addGestureRecognizer:tapRecognizer];
    //...
}

The dismiss method is never triggered, why? I am on iOS7, using storyboard.


Log of touch.view

MYAPP[5779:60b] <UIView: 0x17ecd8b0; frame = (0 0; 320 418);
 autoresize = RM+BM; layer = <CALayer: 0x17ecd910>>

self.view:

 MYAPP[5779:60b] <UIView: 0x17ecd590; frame = (0 64; 320 504);
 autoresize = RM+BM; gestureRecognizers = <NSArray: 0x17eb2c70>; layer
 = <CALayer: 0x17ecd5f0>>

Log from debugger: http://dpaste.com/1768718/

¿Fue útil?

Solución

It works fine on my end.

If you breakpoint in gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch can you ensure that touch.view is actually self.view in your implementation?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top