检测到 TableView 上的触摸并且仍然能够滚动

Posted

技术标签:

【中文标题】检测到 TableView 上的触摸并且仍然能够滚动【英文标题】:Detect touch over TableView and still be able to scroll 【发布时间】:2015-08-04 11:31:13 【问题描述】:

我需要能够检测即时触摸并获得其位置。 (所以 didSelectRowAtIndexPath 帮不了我们,因为它在快速上下滚动时不会立即动作,你需要吸气并一一选择)

已经尝试了我能想到的一切。在每个单元格中开始的触摸不起作用,因为它在自定义单元格类中实现时突然表现得像 didSelectRowIndexPath。与 TableViewController 相同的结果,触摸的性质开始(您触摸它,立即响应)只是不起作用。

* 我不想点击。需要能够触摸(非常小心/缓慢地滑动时,TapGesture 没有响应,但开始触摸时总是会响应)*

【问题讨论】:

您想要实现的功能。 didSelectRowAtIndexPath 用于选择行。 好的,我已经在单元格的左侧实现了一个视图,它会根据用户点击的单元格上下移动。当我只使用 UIViews 制作自己的完全自定义的 TableView 时,我让它在我的其他项目中工作,而没有其他任何东西。因为我不需要处理单元格或任何东西,只需要点击区域的位置,然后简单地上下移动视图,完成。现在使用实际的 UITableView.. 迷失方向。 【参考方案1】:

不确定这是您需要的,但您可以创建一个TapGestureRecognizer

您可能会与 UITableView 自己的手势识别器发生冲突,但有一些机制可以解决这些问题,希望能够让您实现所需的行为(查看 requireGestureRecognizerToFailUIGestureRecognizerDelegategestureRecognizerShouldBegin 和 @987654325 @)。

【讨论】:

【参考方案2】:

试试这个。

在 cellForIndexpath 方法中。

      UITapGestureRecognizer *singleFingerTap =
            [[UITapGestureRecognizer alloc] initWithTarget:self
                                                    action:@selector(handleSingleTap:)];
            singleFingerTap.delegate=self;
            cell.contentView.tag=indexPath.row;
            [cell.contentView addGestureRecognizer:singleFingerTap];



//The event handling method
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer 
    NSLog(@"%ld",(long)recognizer.view.tag);   

【讨论】:

【参考方案3】:

我认为你需要做的是,将 UILongPressGestureRecognizer 添加到 tableview,这样正常的触摸会滚动,长按会做任何你想做的事情。将它的 minimumPressDuration 设置为 0.2 这样就不会花费太多时间。为 UILongPressGestureRecognizer 添加操作,并在该方法中获取如下位置:

CGPoint touchPointInView = [sender locationInView: self.view]; //location reespective to view
CGPoint touchPointInView1 = [sender locationInView: tableView]; //location respective to tableview

【讨论】:

它有什么问题?因为我用上面的代码做同样的事情。我也想在长按上滚动并做一些事情,它对我有用。 它有点用,但如果你真的非常非常小心地触摸它,它不会响应。它确实适用于屏幕的任何其他不是 TableView 的部分,但是一旦我在 TableView 上尝试它,它的行为就会不同。 屏幕的任何其他部分?你添加它来查看?我要求将 UILongPressGestureRecognizer 添加到 tableview 是的,我做到了,它的行为就像我说的那样,然后我在其他地方尝试了它只是为了看看,它工作了,因此它在 TableView 上的行为不同,因为我在任何地方都尝试过。

以上是关于检测到 TableView 上的触摸并且仍然能够滚动的主要内容,如果未能解决你的问题,请参考以下文章

如何检测对 UITableView 的触摸,到目前为止似乎没有任何效果?

没有事件处理的触摸检测

IOS/Objective-C:检测 UIVIew 上的滑动和屏幕相同位置的按钮触摸

如何使用多个部分检测UITableViewCell的UIView上的触摸?

如何检测 UI 图像上的触摸?

UIScrollView 中的触摸事件发送到后面的 tableview