将UITableView上的水平滑动事件转发到父视图

时间:2013-11-03 01:23:12

标签: objective-c uitableview uigesturerecognizer uiswipegesturerecognizer

我有UITableView我希望对点击和垂直滑动做出响应,但仍然有类似userInteractionEnabled = NO的水平滑动。我的意思是,它不会处理触摸并将触摸事件传递回其超级视图。

我尝试过的东西不起作用:

  • NO

  • 中返回- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
  • 覆盖touchesBegan / touchesMoved / touchesEnded并将活动传递给下一位回复者

  • 为水平滑动添加手势识别器并将cancelsTouchesInView设置为YES

我一直试图将其打开和关闭几周,所以非常感谢任何帮助!

4 个答案:

答案 0 :(得分:2)

  

你可以更好地查看tableview.view颜色的空视图   清空并向该视图添加手势。如果手势方向是   vertical.scroll tableview

答案 1 :(得分:0)

您是否尝试在表格视图的父视图中添加水平滑动手势识别器?同时关闭表格视图上的水平滚动。 (设置alwaysBounceHorizontal=NO

答案 2 :(得分:0)

禁用每个表格视图单元格的用户交互应该会有所帮助。 我建议用cellForRowAtIndexPath方法进行。

答案 3 :(得分:-1)

这个问题的答案并不简单,因为UITableView管理了很多触摸,而这个触摸由不同的组件管理。 所以,为了给你一个正确和有效的答案,你必须解释:

  • 您要禁用哪种滑动(从左到右,从右到左)
  • 其中(在空表视图上,在单元格上)
  • 当您执行此滑动时会发生什么(单元格进入编辑模式,导航控制器转到上一页ecc ....)

例如:通过覆盖touchesBegan:withEvent无法避免UITableViewCell上的滑动到删除,因为内部内容视图(UITableViewCellContentView私有类接收到触摸,因此您可以子类并覆盖touchesBegan:withEvent)。 但这不是必需的,因为您可以禁用此行为将此方法添加到UITableViewController:

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleNone;
}

当您禁用编辑(例如)时,单元格和表格视图不再能够管理触摸,因此触摸将被转发到链中的下一个响应者。

这只是一个例子,您必须解释所有给您不信任行为的案例,让我们为您提供更多帮助。

最后的建议: 在this Page,您将找到关于命中测试结束事件处理过程如何工作的非常好的和有趣的解释。 当您添加更多详细信息时,我会使用更具体的信息更新答案。

此致

的Fabio