我在我的代码中使用UITableView,很高兴知道用户是否手动滚动UITableView或者是以编程方式完成的。有没有办法知道这个?
答案 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.isTracking
和tableView.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
}
}