如何知道UITableView是手动(手动)还是以编程方式滚动?

时间:2011-07-28 18:17:19

标签: ios uitableview scroll

我在我的代码中使用UITableView,很高兴知道用户是否手动滚动UITableView或者是以编程方式完成的。有没有办法知道这个?

6 个答案:

答案 0 :(得分:30)

UITableView是UIScrollView的子类。 所以你可以用这个

if (!tableView.isDragging && !tableView.isDecelerating)
{
   // the table is *not* being scrolled
}
这是有效的。我在我的一个应用程序中使用它。

答案 1 :(得分:6)

您可以实现UIScrollViewDelegate的以下方法,以了解表格视图的滚动:

- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView

别忘了把它放在......

@interface YourViewController : UIViewController <UIScrollViewDelegate>

希望它有所帮助,欢呼:)

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

使用它来检测由于用户交互而导致的快速滚动和缓慢滚动:

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

答案 4 :(得分:0)

您可以激活点击识别器,检测已注册的所有触摸。

如果桌面视图滚动,但没有涉及触摸屏,则应覆盖它。

答案 5 :(得分:0)

我在里面检查了tableView.isTrackingtableView.isDecelerating scrollViewDidScroll。但是,如果用户仅稍微移动了表格视图,则对我来说不起作用。由于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
    }
}