【问题标题】:Conflicting Gesture Recognizers on UITableViewUITableView 上的冲突手势识别器
【发布时间】:2012-12-29 13:15:48
【问题描述】:

我的UIView 上有两个自定义控件,一个是现在流行的滑动菜单(当您在NavBar 上滑动手指时,视图会向右滑动),另一个是UITableViewCell - 它是来自名为 DMSlidingTableViewCell 的控件的自定义 TableViewCell(就像在 Twitter 应用程序中 - 当您滑动左侧的单元格时,它会显示一些按钮等)

它们工作得很好,但是当我尝试将手势识别器添加到整个 UITableView 从而使整个视图成为UIGestureRecognizer 的区域时(所以当我移动它时,我可以将视图向右移动)手势识别器莫名其妙的冲突。

这可能是什么原因?

【问题讨论】:

标签: iphone ios objective-c uitableview


【解决方案1】:

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

– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:

delegate method.

请记住,您有 2 个手势,因此有 2 个委托(从概念上讲,它们由相同的方法实现),因此您可以使一个手势(第一个参数)始终返回 NO,另一个 YES 并查看是否可以两个手势识别器以令人满意的方式协同工作。

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

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

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

【讨论】:

  • 我想知道,你如何指定哪个手势识别器应该响应单个类中的哪个方法?
【解决方案2】:

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

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

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    相关资源
    最近更新 更多