如何检查UITableView何时完成滚动

时间:2013-05-13 12:08:26

标签: ios objective-c uitableview uiscrollview

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

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

4 个答案:

答案 0 :(得分:35)

您将按如下方式实施UIScrollViewDelegate协议方法:

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

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

- (void)scrollingFinish {
    //enter code here
}

Swift版

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

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

func scrollingFinished() {
    print("scrolling finished...")
}

对于上面的委托方法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 Documents所说,when the scrolling movement comes to a halt

答案 1 :(得分:5)

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

- (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");
}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

在使用shanegao's answer和Jovan Stankovic的评论之后,我为Swift3设计了这个 -

extension NMViewController: UIScrollViewDelegate {
    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
        if !decelerate {
            scrollViewDidEndDecelerating(scrollView)
        }
    }

    func scrollViewDidScrollToTop(_ scrollView: UIScrollView) {
        scrollViewDidEndDecelerating(scrollView)
    }

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
        // Your logic to handle after scrolling is done
    }
}