UITableViewCell应该停止将触摸事件转发到ScrollView

时间:2014-08-05 14:31:11

标签: ios objective-c uitableview

我有一个带有DrawingView作为子视图的自定义UITableViewCell。如果用户每次将触摸事件转发到基础ScrollView(UITableView)并且视图滚动时尝试在该视图上绘制某些内容。如何禁用从touch / scroll-events到scrollView的转发,用户可以在DrawingView上绘制?

任何想法?我测试了exclusiveTouch属性,像hitTest或touchBegan这样的方法来捕获事件并停止滚动,但没有任何帮助。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

这里需要注意的是,“绘图”动作很容易被解释为滚动动作。

您需要做的是在您的单元格上覆盖pointInside。

有效:

- (BOOL)pointInside:(CGPoint)point
          withEvent:(UIEvent *)event
{
    if (CGRectContainsPoint(drawingView.frame, point)) {
        // Use the point to do the drawing
        [drawingView drawAtPoint:point];
        // Disable scrolling for good measure
        self.tableView.scrollView.scrollEnabled = NO;
        return NO;
    }
    // Enable scrolling
    self.tableView.scrollView.scrollEnabled = YES;
    return [super pointInside:point withEvent:event];
}

这意味着只要用户触摸drawingView中的单元格,就不会滚动。

如果你想在drawingView中同时滚动和绘制,那么这将是一个很大的问题。

看看这是否有效。你可能不得不做一些额外的工作,比如将点转发到你的drawingView来绘制一些东西。

请注意,即使您的手指触摸同一点,也可以多次调用pointInside方法,以便处理被调用的重复事件。