“覆盖func scrollViewDidScroll”多次调用。我只想打电话一次
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“覆盖func scrollViewDidScroll”多次调用。我只想打电话一次相关的知识,希望对你有一定的参考价值。
我做了分页。滚动时多次调用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
}
}
}
假设我已经正确地阅读了您的问题,这应该可以解决问题,或者至少让您开始朝着正确的方向前进......
以上是关于“覆盖func scrollViewDidScroll”多次调用。我只想打电话一次的主要内容,如果未能解决你的问题,请参考以下文章