UIGestureRecognizer阻塞表视图滚动

ind*_*gie 8 cocoa-touch uiview ipad uigesturerecognizer

我正在使用自定义UIGestureRecognizer子类来跟踪我InfoView班级的手势.该InfoView班是一个自定义的子视图UITableViewCell称为子类InfoCell.

我已经将我的手势识别器添加到我的根视图(屏幕上其他所有内容的父视图,因为我的自定义手势识别器的目的是允许InfoCell 在表之间拖动视图).现在,除了一件事以外,一切都有效.我在我的UIGestureRecognizer子类中使用以下代码来检测InfoView视图上的触摸:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UIView *touchView = [[touches anyObject] view];
    if ([touchView isKindOfClass:[InfoView class]]) {
        // Do stuff
    }
Run Code Online (Sandbox Code Playgroud)

这里的问题是InfoView对象的触摸被截获,因此它们不会被转发到UITableView包含InfoCell它的父视图InfoView.这意味着我无法再通过拖动视图来滚动表InfoView视图,这是一个问题,因为它InfoView涵盖了整个视图InfoCell.

有什么方法可以将触摸转发到表格视图,以便它可以滚动?我已经尝试了很多东西:

[super touchesBegan:touches withEvent:event];

[touchView.superview.superview touchesBegan:touches withEvent:event];(touchView.superview.superview获取对其父级的引用UITableView)

但到目前为止还没有任何工作.此外,cancelsTouchesInViewUIGestureRecognizer的设置是NO,因此不会干扰触摸.

感谢帮助.谢谢!

Mar*_*ams 26

查看UIGestureRecognizerDelegate方法: - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

如果返回YES,则会阻止您的手势识别器踩踏UIScrollView用于检测滚动的手势识别器.


Fel*_*lix 9

UIGestureRecognizer具有属性"cancelsTouchesInView",默认情况下设置为YES.这意味着当识别出手势时,UIView中的触摸被取消.尝试将其设置为NO以允许UIScrollView接收进一步的触摸事件.


ind*_*gie 3

touchesBegan我的方法中有一行将state手势识别器的属性设置为UIGestureRecognizerStateBegan。删除这一行似乎可以解决问题。