UITableView上的手势识别器冲突

4
我在我的UIView上有两个自定义控件,其中一个是现在流行的滑动菜单(当你在NavBar上滑动手指时,视图向右滑动),另一个位于UITableViewCell上 - 它是来自名为DMSlidingTableViewCell的控件的自定义TableViewCell(就像Twitter应用程序中的那样 - 当你在左侧滑动单元格时,它会显示一些按钮等)。
它们工作得很好,但是当我尝试将手势识别器添加到整个UITableView中,从而使整个视图成为UIGestureRecognizer的区域(因此当我移动它时,可以将视图向右移动),手势识别器会发生冲突。
这里可能的原因是什么?

你想在表格单元格和整个表格上识别哪些手势?它们是相同类型的还是不同的? - sergio
@sergio 手势识别器都是 SwipeGesture,但无论是否具有相同的方向,它们都无法正常工作。 - Sergey Grischyov
1
请查看http://www.chewyapps.com/2012/10/26/swiping-on-a-uitableviewcell/和http://kaihangjia.blog.163.com/blog/static/2145761562012111224644877/相关的编程内容。 - TonyMkenu
2个回答

6
我不清楚您认为两个滑动手势识别器在该情况下如何共同工作,但我认为您可以尝试并查看
 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

委托方法

请记住你有2个手势,所以有2个委托(从概念上讲,它们应该被同一方法实现),因此你可以使一个手势(第一个参数)总是返回NO,另一个返回YES,并查看是否能够令两个手势识别器协同工作。

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {

    if ([gestureRecognizer.view isKindOfClass:[UITableView class]]) {
       ...
    } else {
       ...
    }
}

这只是一个示例,在您的情况下应该有效(虽然要检查语法),但您也可以将两个识别器存储在类的属性中,以便知道哪个是哪个。


我想知道,在单个类中如何指定哪个手势识别器应该响应哪个方法? - Sergey Grischyov

5

当我在 UITableView 上使用 UIGestureRecognizer 时,遇到了和你类似的问题。最后,我通过这个 链接 找到了 UIGestureRecognizer 中的 "cancelsTouchesInView" 属性,它对解决问题很有帮助。

  UIGestureRecognizer* tapGesture = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
  **tapGesture.cancelsTouchesInView = NO;**//pass touch event to others

best wishes!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接