1

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

4

2 回答 2

2

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

然而,在 UIScrollView 中,有一种特殊情况,它不依赖于作为 nextResponder 来处理滚动事件(滚动最有可能在诸如 hitTest 之类的方法中检测到:)。所以无论你对转发或事件做了什么,滚动仍然会发生。防止滚动发生的唯一方法是在检测到您的手势后立即禁用父视图上的滚动,然后在结束或取消时重新启用滚动。

于 2009-10-23T13:13:37.053 回答
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];
}
于 2009-10-22T17:07:40.347 回答