我在我的代码中使用了UITableView,并且想知道用户是手动滚动UITableView还是通过程序滚动的。有没有办法知道这一点?
我在我的代码中使用了UITableView,并且想知道用户是手动滚动UITableView还是通过程序滚动的。有没有办法知道这一点?
UITableView是UIScrollView的子类,因此您可以使用它。
if (!tableView.isDragging && !tableView.isDecelerating)
{
// the table is *not* being scrolled
}
这个有效。我在我的一个应用程序中使用它。
- (void)scrollViewWillBeginDragging:(UIScrollView *)activeScrollView
别忘了也要把这个放上...
@interface YourViewController : UIViewController <UIScrollViewDelegate>
使用此功能来检测由用户交互引起的快速和缓慢的滚动:
if tableView.isDragging, tableView.isDecelerating || tableView.isTracking {
// Table view is scrolled by user, not by code
}
我发现最好的方法是使用isTracking
属性而不是isDragging
。
if tableView.isTracking && tableView.isDecelerating {
// Table was scrolled by user.
}
tableView.isTracking
和tableView.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
}
}