如何知道UITableView是手动滚动还是程序滚动?

20

我在我的代码中使用了UITableView,并且想知道用户是手动滚动UITableView还是通过程序滚动的。有没有办法知道这一点?

6个回答

38

UITableView是UIScrollView的子类,因此您可以使用它。

if (!tableView.isDragging && !tableView.isDecelerating)
{
   // the table is *not* being scrolled
}

这个有效。我在我的一个应用程序中使用它。


9
您可以实现UIScrollViewDelegate的以下方法,以了解您的表视图的滚动情况:
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView

别忘了也要把这个放上...

@interface YourViewController : UIViewController <UIScrollViewDelegate>

希望这会有所帮助,加油 :)

4

使用此功能来检测由用户交互引起的快速和缓慢的滚动:

if tableView.isDragging, tableView.isDecelerating || tableView.isTracking {
    // Table view is scrolled by user, not by code
}

3

我发现最好的方法是使用isTracking属性而不是isDragging

if tableView.isTracking && tableView.isDecelerating {
    // Table was scrolled by user.
}

2
我在scrollViewDidScroll中检查了tableView.isTrackingtableView.isDecelerating。然而,如果用户只轻微移动了tableview,它对我没有用。由于scrollView具有panGesture,我们可以检查该手势的速度。如果tableView是以编程方式滚动的,则x和y方向上的速度均为0.0。通过检查此速度,我们可以确定用户是否滚动了tableView,因为panGesture具有速度。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let velocity = scrollView.panGestureRecognizer.velocity(in: tableView)
    print("Velocity: \(velocity)")
    if velocity.x != 0.0 || velocity.y != 0.0 {
        // user scrolled the tableview
    }
}

0
您可以激活一个轻拍识别器,检测所有注册的触摸。
如果表视图滚动,但没有涉及到触摸手势,则应覆盖它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接