【问题标题】:UITableViewCell should stop Forwarding Touch Events to ScrollViewUITableViewCell 应该停止将触摸事件转发到 ScrollView
【发布时间】:2014-08-05 14:31:10
【问题描述】:

我有一个带有 DrawingView 作为子视图的自定义 UITableViewCell。如果用户尝试在每次触摸事件被转发到底层 ScrollView (UITableView) 并且视图滚动时在该视图上绘制一些东西。如何禁用从触摸/滚动事件到滚动视图的转发,用户可以在 DrawingView 上绘制?

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

【问题讨论】:

  • 如果禁用滚动就够了,试试 self.tableView.scrollEnabled = NO;
  • 我不想禁用滚动,因为其他单元格不用于绘图。如果你拖动这个单元格,scrollView 应该滚动..
  • 只要用户触摸 DrawingView,就会使用 @EDUsta 行暂时禁用滚动。您可以捕获 touchesBegan/touchesEnded 事件来启用/禁用滚动。

标签: ios objective-c uitableview


【解决方案1】:

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

您需要做的是覆盖单元格上的 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 方法也可能会被多次调用,因此请注意调用重复事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多