gpt4 book ai didi

ios - 尝试使用 willDisplayCell 在 Swift UItableView 中实现无限滚动。想要控制增量做一次

转载 作者:行者123 更新时间:2023-11-30 12:25:54 28 4
gpt4 key购买 nike

这是我迄今为止尝试过的:

override func collectionView(_ collectionView: UITableView, willDisplay cell: UICollectionViewCell, forRowAt indexPath: IndexPath) {
if (indexPath.row == self.dataArray.count-30) {
pageNumber += 1
self.downloadTask()
}
}

self.downloadTask() 将使用 pageNumber 并下载适当的数据。

现在,在剩余 30 行或更多行要显示后不久,页码会增加多次,我只想限制它一次,直到 self.downloadTask() 完成执行,稍后再回来,当另外 30 行时剩余行要显示在 UITableView 中。

如何才能以这样的方式进行操作:每次 UITableView 中显示剩余 30 行时,pageNumber 仅递增 1 次。

最佳答案

我怀疑将 30 改为 3 只会降低问题出现的频率,而不会真正解决问题。页面加载之间和/或用户滑动速度非常快时,滚动也可能会显得断断续续或无响应。

我建议使用绝对(而不是相对)计算来确定何时需要下载新数据。

例如,如果您的 downloadTask() 函数一次获取 30 个项目,您可以按 30 个项目 block 处理 dataArray,并在显示最后一个 block 中的任何项目后立即获取下一个 block (页面):

let wantPage = indexPath.row / 30 + 1
if wantPage > pageNumber
{
pageNumber = wantPage
downloadTask()
}

如果 downloadTask() 一次获取的项目少于 30 个,并且您希望数据比 Collection View 的滚动位置提前 30 个项目,则只需将该数字添加到 block (页面)计算中即可:

let itemsPerPage = 10 
let wantPage = (indexPath.row + 30) / itemsPerPage
if wantPage > pageNumber
{
pageNumber = wantPage
downloadTask()
}

您的 pageNumber 变量最终将达到没有更多可用数据的点(即少于每页的项目数),并且此“绝对”计算将自动停止调用 downloadTask()。

关于ios - 尝试使用 willDisplayCell 在 Swift UItableView 中实现无限滚动。想要控制增量做一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44223157/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com