在UIScrollView内检测UITableViewCell上的滑动手势

Rog*_*Rog 10 uitableview uiscrollview uigesturerecognizer

我希望有人能够帮助我解决目前正在解决的问题!

给定以下视图层次结构

在此输入图像描述

我希望能够在我的自定义UITableViewCell上检测滑动手势.

我已经将UIScrollView子类化,并有一个hitTest:withEvent:方法,用于检查我是否触摸了tableview单元格(或其内容),在这种情况下,我设置了以下滚动视图属性:

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    UIView* result = [super hitTest:point withEvent:event];
    if ([result.superview isKindOfClass:[UITableViewCell class]] || [result.superview tag] == SUBVIEW_TAG)
    {
        self.canCancelContentTouches = NO;  
        self.delaysContentTouches = YES;
    } else {
        self.canCancelContentTouches = YES;
        self.delaysContentTouches = NO;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

我也实施了:

- (BOOL)touchesShouldCancelInContentView:(UIView *)view
{
    if (view.tag == SUBVIEW_TAG || [[view superview] isKindOfClass:[UITableViewCell class]])
        return NO;
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

如果被触摸的视图是表格视图单元格,则返回NO.

这些方法都被调用并按预期执行其操作,但我仍然无法阻止UIScrollView"占用"滑动手势.

有趣的是,如果我在上面的两个方法(带有SUBVIEW_TAG的方法)中包含包含tableview和cell的UIView,它的工作方式非常完美,所以我猜它必须与UITableView继承自UIScrollView这一事实有关.

我的主要目标是能够在细胞上滑动以显示细胞的更多选项.滚动视图将捕获该视图上任何其他位置的水平滑动,并根据其正常行为水平移动内容.

任何想法将非常感谢!

谢谢!ROG

Fra*_*dez 3

我在滚动视图内的组件的滑动检测中遇到了类似的问题,我能够通过以下方式解决它:

\n\n
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:swipeGesture]\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中scrollView是充当容器的滚动视图对象,而swipeGesture是scrollview内的组件滑动手势对象。

\n\n

因此,您可以像这样为单元格对象定义滑动(对于示例中的向右滑动,请根据需要自定义它)

\n\n
UISwipeGestureRecognizer* rightSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(yourMethod)];\n        [rightSwipeRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft];\n\n[cell addGestureRecognizer:rightSwipeRecognizer];\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后做

\n\n
[scrollView.panGestureRecognizer requireGestureRecognizerToFail:rightSwipeRecognizer]\n
Run Code Online (Sandbox Code Playgroud)\n\n

requireGestureRecognizerToFail的文档说:

\n\n
\n

此方法创建与另一个手势识别器的关系,该关系延迟接收器\n UIGestureRecognizerStatePossible 的转换。接收器转换到的状态取决于 otherGestureRecognizer 发生的情况:

\n\n

如果 otherGestureRecognizer 转换为 UIGestureRecognizerStateFailed,则接收器将转换为其正常的下一个状态。

\n\n

如果 otherGestureRecognizer 转换为 UIGestureRecognizerStateRecognized 或 UIGestureRecognizerStateBegan,则接收器转换为 UIGestureRecognizerStateFailed。

\n\n

可能会调用此方法的一个示例是当您希望单击手势要求双击手势失败时。

\n\n

可用性 适用于 iOS 3.2 及更高版本。

\n
\n\n

希望有帮助!

\n