如何检测UITableView何时滚动到最底部/顶部?

时间:2015-06-13 01:52:08

标签: ios objective-c uitableview cocoa-touch

我的视图有3个tableView' s。一个是"主表视图",然后我有一个'答案表视图'和'百分比表视图'。

当屏幕加载时,主表视图占据屏幕的前95%。屏幕的底部是一个包含2个按钮的UIView。 "答案"和"百分比"。

它的工作方式是,如果我点击"百分比"它将主表视图的高度更改为0,并将该高度提供给答案表视图。这可以激活"答案/百分比"查看顶部,并在其下方显示Answers或Percentage TableView。

以下是一个例子:

enter image description here

如您所见,我点击"百分比"激活它。如果你点击"百分比"再次将它重新制作成动画。

但是,我想要做的是"答案/百分比"视图位于View的底部,用户滚动Main Feed UP到达tableView的内容的最后(不仅仅是结尾,而是结束和更多一点),我想为它设置动画就像在.gif中一样。

同样,如果"答案/百分比"位于顶部,用户滚动下面的"答案表视图"超过上面没有更多数据的特定点,它将完全动画。

另外,我不想要"答案/百分比"视图位于中间,并显示顶视图和底视图。所有这一个,或另一个,但不是两者兼而有之。我现在所拥有的。

我需要知道的是......如何检测用户是否滚动到表格视图的顶部或底部+30像素,以启动我的动画?

2 个答案:

答案 0 :(得分:5)

您可以使用表视图的contentOffset属性。

if(tableView.contentOffset.y >= (tableView.contentSize.height - tableView.frame.size.height)) {
    // Start the animation
}

我没有测试过这个,但请告诉我它是否有效。

答案 1 :(得分:0)

根据 sublimepremise 的方法做出另一个答案,因为以这种方式格式化和发布代码更容易。基本想法是检查表视图的.contentOffset.y,例如通过在其代理中实施scrollViewDidScroll,并相应地触发动画。

它可能有一点QnD的感觉,但如果你还需要在触发动画时中止用户的拖动动作,一个简单的方法就是“重置”表格视图的手势识别器。在代码中可能看起来像这样:

static const CGFloat kChrisTableViewAnimationThreshold = 30.0f;

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == self.topTableView) {
        if([self scrolledPastBottomThresholdInTableView:self.topTableView]) {
            // Start the animation
            // ...

            // Toggling the table view's pangGestureRecognizer off and on cancels the gesture
            self.topTableView.panGestureRecognizer.enabled = NO;
            self.topTableView.panGestureRecognizer.enabled = YES;
        }
    }
}

- (BOOL)scrolledPastBottomThresholdInTableView:(UITableView *)tableView {
    return (tableView.contentOffset.y - kChrisTableViewAnimationThreshold >= (tableView.contentSize.height - tableView.frame.size.height));
}

请注意,此插图显然仅涵盖识别顶部表格视图滚动到其底端的时间,但调整它以处理其他场景应该非常简单。