"覆盖func scrollViewDidScroll"多次打电话。我只想打电话一次

时间:2018-03-03 01:32:34

标签: ios swift uiscrollview

我做了分页。 滚动时多次调用override func scrollViewDidScroll方法。 所以loadMore方法也被多次调用。 我只想在滚动时调用loadMore()方法一次。

我该如何解决?

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y >= scrollView.contentSize.height / 3 {
        loadMore()
    }
}

// pagination
func loadMore() {
    // if posts on the server are more than shown
    if page <= prePage {
        // increase page size
        page = page + 3
        prePage = page

        self.posts.removeAll()
        self.collectionView.reloadData()
        Api.Post.observeTopPosts(page: self.page) { (post) in
            self.posts.append(post)
            print(post)
            self.collectionView.reloadData()
        }
    }
}

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可能需要实现一个Bool值,该值将决定是否调用loadMore函数。

创建一个var,它将决定您的函数是否已被调用:

var hasLoaded = false

然后在scrollViewDidScroll方法中添加以下内容:

  override func scrollViewDidScroll(_ scrollView: UIScrollView) {

    if scrollView.contentOffset.y >= scrollView.contentSize.height / 3 {

        //If we haven't loaded data then call the function
        if !hasLoaded{

           loadMore()

           //Data has been loaded so set hasLoaded to true
           hasLoaded = true
        }
    }
}

假设我已经正确地阅读了您的问题,这应该可以解决问题,或者至少让您开始正确的方向......