如何知道UITableView以哪种方式滚动

时间:2012-07-18 08:09:08

标签: iphone ios ipad uitableview

我们有什么方法可以知道UITableView是向上滚动还是向下滚动?

8 个答案:

答案 0 :(得分:44)

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGPoint currentOffset = scrollView.contentOffset;
    if (currentOffset.y > self.lastContentOffset.y)
    {
        // Downward
    }
    else
    {
        // Upward
    }
    self.lastContentOffset = currentOffset;
}

答案 1 :(得分:29)

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView 
                    withVelocity:(CGPoint)velocity 
             targetContentOffset:(inout CGPoint *)targetContentOffset{

    if (velocity.y > 0){
        NSLog(@"up");
    }
    if (velocity.y < 0){
        NSLog(@"down");
    }
}

答案 2 :(得分:12)

我们可以这样做吗?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

      if ([scrollView.panGestureRecognizer translationInView:scrollView].y > 0) {
        // down
      } else {
        // up
      }

    }

答案 3 :(得分:2)

UITableView是一个UIScrollView子类,因此您可以将自己设置为UIScrollViewDelegate并获取滚动视图委托回调。

其中一个委托方法(-scrollViewDidScroll:)的参数是滚动的滚动视图,您可以将其与表视图进行比较,以了解滚动的那个。


抱歉,我误解了你的问题。我以为你想知道哪个表视图正在滚动(我错过了“方式”)。

要知道您可以在变量中保留先前偏移的方向,并查看delta(current.y - previous.y)是正(向下滚动)还是负(向上滚动)。

答案 4 :(得分:1)

您可以跟踪内容偏移的差异。将旧的保留在成员/静态变量中并检查当前值。如果旧值低,则滚动向下,反之亦然。

答案 5 :(得分:1)

  override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

        if targetContentOffset.memory.y < scrollView.contentOffset.y {
            //println("Going up!")

        } else {
           // println("Going down!")

        }
    }

答案 6 :(得分:0)

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
   if (yourTableView.isDragging || yourTableView.isDecelerating)
       {
                // your tableview is scrolled.
               // Add your code here
       }
}

在这里,你必须替换你的tableview名称而不是“yourTableView”。

yourTableView.isDragging - 如果用户已开始滚动,则返回YES。这可能需要一些时间和/或距离来启动。

yourTableView.isDecelerating - 如果用户未拖动(触摸)但滚动视图仍在移动,则返回YES。

答案 7 :(得分:0)

您可以通过以这种方式实施['why wont there dashes go away'] 委托方法来实现这一点,它非常优雅。

PS:UIScrollViewlastOffset是ViewController的属性。

scrollingUpward