I use UIScrollViewDelegate to listen for the scrollViewDidScroll delegate functions are called. As written below:

 class PViewController: UIViewController, UIScrollViewDelegate { override func viewDidLoad() { super.viewDidLoad() scrollView.delegate = self } func scrollViewDidScroll(_ scrollView: UIScrollView) { print(scrollView.contentOffset.y) } } 

But when I create a custom class, functions are not called.

 class ScrollViewDelegateTop: NSObject, UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { print(scrollView.contentOffset.y) } } class PViewController: UIViewController, UIScrollViewDelegate { override func viewDidLoad() { super.viewDidLoad() scrollView.delegate = ScrollViewDelegateTop() } } 
  • one
    since scrollView.delegate creates weak reference to your newly created instance SrollViewDelegateTop (), it is deployed as soon as the program goes out of their current scope - Max Mikheyenko
  • @MaxMikheyenko Could you specify how to create a delegate correctly? - serj
  • @MaxMikheyenko Thank you, figured out. - serj
  • Post your answer then - Max Mikheyenko
  • @MaxMikheyenko posted, this decision has the right to exist? - serj

1 answer 1

Solved the problem by creating an instance of the delegate class in ViewController

 class ScrollViewDelegateTop: NSObject, UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { print(scrollView.contentOffset.y) } } class PViewController: UIViewController, UIScrollViewDelegate { var scrollDelegat : ScrollViewDelegateTop! override func viewDidLoad() { super.viewDidLoad() scrollDelegat = ScrollViewDelegateTop() scrollView.delegate = scrollDelegat } }