检测UITextView滚动位置

14

我正在尝试实现一个类似于“条款和条件”页面的表单,其中“继续”按钮只有在用户滚动到UITextView底部时才会启用。到目前为止,我已将我的类设置为UIScrollView委托,并实现了以下方法:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"Checking if at bottom of UITextView");
    CGPoint bottomOffset = CGPointMake(0,self.warningTextView.frame.size.height);
    //if ([[self.warningTextView contentOffset] isEqualTO:bottomOffset])
    {
    }    
}

我已经注释掉if语句,因为我不确定如何检查UITextView是否在底部。

3个回答

23

UITextView是UIScrollView的子类,因此在使用UITextView时也可以使用UIScrollView委托方法。

你应该使用scrollViewDidScroll而不是scrollViewDidEndDecelerating,因为滚动视图有可能在没有减速的情况下停止滚动。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    if (scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height)
    {
        NSLog(@"at bottom");
    }
}

谢谢Owen,我今晚会尝试并更新结果(无论成功与否)!James 问题:你在示例中提到了scrollView - 如果我引用我的UITextView.contentOffSet.y等是否有影响? - JamesLCQ
2
你所关注的 scrollView 是变量名,只要你也更改方法名称中的变量名即可随意更改。例如,你可以将其称为 textView,并将方法名称更改为 - (void)scrollViewDidScroll:(UIScrollView *)textView。或者,你可以直接引用你的 UITextView,并将 if 行更改为 if (self.warningTextView.contentOffset.y >= self.warningTextView.contentSize.height - self.warningTextView.frame.size.height) - howanghk

8
这个问题的Swift版本:
func scrollViewDidScroll(_ scrollView: UIScrollView) {

    if scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.frame.size.height {

        print( "View scrolled to the bottom" )

    }
}

0

这应该解决了。它有效。我正在使用它。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{
    float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height;
    if (bottomEdge >= scrollView.contentSize.height) 
    {
        // we are at the end
    }
}

好的方法。不过,当使用浮点数时,我会添加一个误差范围。 - Martol1ni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接