UITapGestureRecognizer和UIButton的点击事件冲突的解决办法

来源:互联网 发布:c语言二级成绩查询 编辑:程序博客网 时间:2024/06/05 17:43

问题描述:

       视图view上有一个UIButton实例btn,绑定了一个点击事件的响应方法buttonClicked:,由于某种需要(如点击空白区域收起键盘),为view添加了UITapGestureRecognizer手势,关键代码如下:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];    [self.view addGestureRecognizer:tap];    [tap release];
       运行,点击按钮btn的时候,方法buttonClicked:未调用,调用的是UITapGestureRecognizer手势的回调方法resignRespond。也就是说UIButton的点击事件被UITapGestureRecognizer截获了,两者相互冲突。

解决方法:

       设置UITapGestureRecognizer的代理,然后在协议方法中作判断,主要代码如下:

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];    tap.delegate = self;    [self.view addGestureRecognizer:tap];    [tap release];
       UITapGestureRecognizer协议方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{    if ([touch.view isKindOfClass:[UIButton class]])    {        return NO;    }    return YES;}