如何检查UITableView何时完成滚动

san*_*aet 17 objective-c uitableview uiscrollview ios

有没有办法检查我的tableview刚完成滚动?table.isDragging并且table.isDecelerating是我能找到的唯一两种方法.当tableview完成滚动时,我不确定如何预测或得到通知.

如果tableView正在滚动,我可以以某种方式使用计时器来检查每一秒吗?

sha*_*gao 35

您将实现UIScrollViewDelegate协议方法如下:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
    if (!decelerate) {
        [self scrollingFinish];
    }
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
    [self scrollingFinish];
}

- (void)scrollingFinish {
    //enter code here
}
Run Code Online (Sandbox Code Playgroud)

Swift版本

public func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if decelerate {
        scrollingFinished()
    }
}

public func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    scrollingFinished()
}

func scrollingFinished() {
    print("scrolling finished...")
}
Run Code Online (Sandbox Code Playgroud)

对于上面的委托方法The scroll view sends this message when the user’s finger touches up after dragging content. The decelerating property of UIScrollView controls deceleration.当视图减速停止时,参数decelerate将为NO.

Apple Document说,第二个用于缓慢滚动,甚至在手指触摸时滚动停止when the scrolling movement comes to a halt.

  • 用户还可以通过点击屏幕顶部来调用表格滚动。不幸的是,在这种情况下,scrollViewDidEndDecelerating 没有被调用,所以我们必须实现 scrollViewDidScrollToTop 来处理这种情况。 (2认同)

Pan*_*man 6

每次用户滚动停止时,以下代码都会更新.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (!decelerate)
    {
        if (isScrollingStart)
        {
            isScrollingStart=NO;
            [self scrollingStopped];
        }
    }
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{

    if (isScrollingStart)
    {
        isScrollingStart=NO;
        [self scrollingStopped];
    }
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    isScrollingStart=YES;
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    isScrollingStart=YES;
}
-(void)scrollingStopped
{
    NSLog(@"Scrolling stopped");
}
Run Code Online (Sandbox Code Playgroud)


Jee*_*ton 0

UITableView 符合 UIScrollViewDelegate。请参阅该协议的文档,它有您需要的方法。