2013-05-13 83 views
12

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

我可以以某种方式使用计时器检查每一秒如果tableView滚动或不?

回答

0

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

30

你会实现UIScrollViewDelegate协议方法如下:

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

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

第二个用于缓慢滚动,甚至在您的手指触摸时滚动停止,如Apple Documents所述,when the scrolling movement comes to a halt

+1

用户还可以通过点击屏幕顶部调用表滚动。不幸的是,在这种情况下,scrollViewDidEndDecelerating没有被调用,所以我们必须实现scrollViewDidScrollToTop来处理这种情况。 – 2017-06-27 09:28:49

+0

这个答案是最好的,而@JovanStankovic,你是非常正确的。 – 2017-10-05 08:49:44

4

下面的代码会在用户每次停止滚动时更新。

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

非常好用,谢谢。值'isScrollingEnd'被写入但从未使用过。是否有需要使用它的情况?你打算在滚动检查中检查它吗? – oyalhi 2016-01-10 09:28:20

+0

更新了ans。 ,没有使用isScrollingEnd :) – 2016-01-11 06:30:06

+0

谢谢!它的工作很好。 – Raja 2017-03-25 13:47:43

0

使用shanegao's answer和它的Jovan斯坦科维奇的评论后,我设计了这个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 
    } 
}