检测TextView滚动以在Swift 3.0中显示按钮

时间:2016-10-20 05:20:53

标签: swift uiscrollview uitextview

我在UIView中有一个TextView和一个隐藏按钮,我试图检测用户何时向下滚动到一长串文本的底部,并在它们到达底部时显示隐藏按钮。我看过一些关于如何使用scrollViewDidScroll在Obj-C中完成它的旧帖子,但不确定如何使用swift,或者如何使用TextView而不是ScrollView。任何帮助都会很棒,因为我还没有走得太远。

到目前为止,这是我尝试将obj-c帖子翻译成swift,但它对我没用,事实上我甚至不确定该函数何时被调用:

 import UIKit

 class MainVC: UIViewController, UIScrollViewDelegate {

    @IBOutlet var textView: UIScrollView!
    @IBOutlet var button: UIButton!

    override func viewDidLoad() {

        super.viewDidLoad()

        textView.delegate = self


    }

   func scrollViewDidScroll(textV: UIScrollView) {

        if (textV.contentOffset.y >= textV.contentSize.height - textV.frame.size.height)
        {
            button.isHidden = false
        }
    }

}

感谢您提前提供任何帮助:)

3 个答案:

答案 0 :(得分:8)

UITextViewUIScrollView的子类,如果您查看声明,默认情况下会看到它是UIScrollViewDelegate,因此您可以删除UIScrollViewDelegate声明你的控制器。相反,使控制器UITextViewDelegate允许它调用scrollViewDidScrollMethod。

class ViewController: UIViewController, UITextViewDelegate {

    @IBOutlet weak var textView: UITextView! {
        didSet {
            textView.delegate = self
        }
    }
    @IBOutlet weak var button: UIButton! {
        didSet {
            button.hidden = true
        }
    }

    func scrollViewDidScroll(scrollView: UIScrollView) {
        button.hidden = scrollView.contentOffset.y + scrollView.bounds.height < scrollView.contentSize.height
    }
}

答案 1 :(得分:3)

(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height

if (bottomEdge >= scrollView.contentSize.height) {

    self.yourButtonName.hidden = true
    }
}

答案 2 :(得分:2)

如果按钮位于视图的最后一个(self.view),那么我认为你必须检查你的contentOffset点是否在contentSize的底部。所以你可能会做类似的事情:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { 
    float bottomEdge = scrollView.contentOffset.y +scrollView.frame.size.height;       
    if (bottomEdge >= scrollView.contentSize.height) {
        self.yourButtonName.hidden = true 
    }
 }