解决触控点击事件和手势的冲突

来源:互联网 发布:centos搭建l2tp服务器 编辑:程序博客网 时间:2024/04/28 01:23
<pre name="code" class="objc">解决触控点击事件和手势的冲突 (2013-07-21 17:22:11)转载▼标签: uigesturerecognizer nsstringfromclass uitableviewcellcontetableviewcell在项目实际过程中,经常需要在UITableView,UIScrollView等上添加手势来取消键盘响应,但是UIScrollView的机制是接受触摸事件,但是会让手势暂停一段时间time-off,会将手势截留一段时间,使用一个定时器来监听自身坐标值是否有所改变,如果坐标值改变了,说明滑动了,那么就会取消tracking events 发送给subViews;相反如果坐标值未发生改变,那么就会将tracking events 发送给子视图。如果在视图上添加了手势,那么明显就会有冲突,还好,苹果有api帮助我们解决这些问题,实现这下面代理方法,可以解决触控点击事件和手势的冲突,包括UITexFiled,UITableView等等控件单击事件不响应问题。- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{ if ([touch.view isKindOfClass:[UITextField class]])    {        return NO;    }    // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {        return NO;    }    return YES;}以下是根据自己项目需求的代码: (selfBGView 为添加手势的自定义view,其它代码可以直接复制使用)先遵循<UIGestureRecognizerDelegate>的协议,让gesture.delegate = self;即可执行以下代码- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch{    // 输出点击的view的类名//    NSLog(@"%@", NSStringFromClass([touch.view class]));    //如果点击的view 的子类是 遮挡我tableview 的一个view的话, 返回 NO,那么 遮挡tableview的问题便迎刃而解,上方和下方注释掉的代码可以不用去管if ([touch.view isKindOfClass:[self.selfBGView class]] && self.selfBGView.hidden == YES) {        return NO;    } {        return NO;    }    //     //若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件//    if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {//        return NO;//    }</pre><pre code_snippet_id="1562270" snippet_file_name="blog_20160122_1_2947390" name="code" class="objc">//最后这里返回 YES 也不要忘记了噢    return  YES;}

0 0
原创粉丝点击