防止父表视图处理触摸

时间:2009-10-22 16:37:18

标签: iphone uitableview uiscrollview touch

我有一个处理用户手势的自定义表格视图单元格。但是,即使我将exclusiveTouch设置为YES,y值随任何量变化的那一刻,即使我正在处理触摸事件,scolling也会开始。当我在单元格中处理触摸事件时,如何防止表格滚动?

2 个答案:

答案 0 :(得分:2)

所以,不幸的是,有条件处理的正确方法取决于superView。对于某些视图和事件(如UITableView选择),您需要将touchesBegan:event转发到nextResponder,跟踪您的手势,将touchesMoved:events转发到nextResponder,直到您检测到您的手势,并在触发时发送touchesCancelled:到下一个响应者,并隐藏下一个响应者的所有其他事件(touchesEnded:和touchesCancelled :)直到你收到touchesEnded:或touchesCancelled:你自己。

然而,在UIScrollView中,有一个特殊情况,它不依赖于成为下一个处理滚动事件的响应者(滚动很可能是在像hitTest这样的方法中检测到的)。因此,无论您在转发或事件方面做了什么,滚动仍然会发生。防止滚动发生的唯一方法是在检测到手势后立即禁用父视图上的滚动,然后在结束或取消时重新启用滚动。

答案 1 :(得分:1)

我认为你需要继承UITableView并实现hitTest:withEvent:这就是我为自定义单元格所做的操作,我在单元格中左右滑动:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    NSIndexPath *indexPath = [self indexPathForRowAtPoint:point];
    UITableViewCell *cell = [self cellForRowAtIndexPath:indexPath];

    if ([cell isKindOfClass:[MyCustomCell class]])
    {
        return cell;
    }

    return [super hitTest:point withEvent:event];
}