在UITableView上冲突的手势识别器

时间:2013-01-15 12:27:39

标签: iphone ios objective-c uitableview

我的UIView上有两个自定义控件,一个是现在流行的滑动菜单(当你在NavBar上滑动手指时,视图滑动到右边),另一个是打开的UITableViewCell - 来自名为 DMSlidingTableViewCell 的控件中的自定义TableViewCell(例如,在 Twitter 应用中 - 当您在左侧滑动单元格时,它揭示一些按钮等。)

它们的工作正常,但是当我尝试在整个UITableView中添加一个手势识别器,从而使整个视图成为UIGestureRecognizer的区域(所以当我移动它时我可以将视图移到右边)手势识别器以某种方式发生冲突。

这可能是什么原因?

2 个答案:

答案 0 :(得分:6)

我不清楚你认为两种滑动手势识别器可以在这种情况下协同工作的方式,但我认为你可以尝试看看

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

delegate method

请记住,你有2个手势,所以2个委托(从概念上讲,它们是通过相同的方法实现的),所以你可以做一个手势(第一个参数)总是返回NO,另一个是,看看你是否可以制作2个手势识别器以令人满意的方式协同工作。

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

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

这只是一个应该适用于你的情况的例子(虽然检查语法),但是你也可以将2个识别器存储在你的类的属性中,这样你就知道哪个是哪个。

答案 1 :(得分:5)

当我在UITableView上使用UIGestureRecognizer时,我遇到了和u一样的问题。最后,我在这个one的UIGestureRecognizer中找到了“cancelsTouchesInView”属性,这很有帮助。

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