ios - "override func scrollViewDidScroll"多次调用。我只想打电话一次

标签 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()
        }
    }
}

最佳答案

要解决这个问题,您可能需要实现一个 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
        }
    }
}

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

关于ios - "override func scrollViewDidScroll"多次调用。我只想打电话一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49079752/

相关文章:

ios - xCode Cocoapods 无法构建项目 ios(9.3)

iOS iTunes 会自动裁剪您的图标吗?

ios - Swift 显示了两个标签栏,但不确定为什么?

iphone - 可缩放 UIScrollView 与 UIButtons 捕获触摸

iPhone UITableView 在顶部添加内容无需滚动

ios - 滚动到新页面时,将旧页面上的视频设置为 0.0 秒

html - iOS Safari 手机 : Doesn't show huge images in correct size

ios - *.aif 和 *.caf 文件之间有区别吗?

ios - Swift - 带有 4 个 UIViewController 的 UIPageViewController

ios - 使用服务器用户名和密码在 swift 中发布方法