【问题标题】:How to use pagination in table view如何在表格视图中使用分页
【发布时间】:2020-05-25 21:38:59
【问题描述】:

基本上我有一个表格视图,每次调用 api 时都会获得 5 个项目。那么如何使用/重新加载更多数据白色滚动表视图。 array.count-1 不适合我在行索引路径的单元格,因为当设备大小更大时,一次显示所有数据并且 api 不调用

【问题讨论】:

  • 您应该在tableViewWillDisplayCell 中触发您的呼叫。每次 indexPath 达到本地计数的最后一个时,获取 API

标签: ios swift xcode swift3 swift4


【解决方案1】:

您应该在 API 请求中发送页码。

首先:声明变量currentPage,初始值为0,并用一个布尔值检查是否有任何列表被加载,初始值为false,这是为了防止滚动视图获取更多列表/项目一次滚动到 tableView 的底部。

var currentPage = 0
var isLoadingList = false

第二个:这是获取数据的函数:

func getFromServer(_ pageNumber: Int){
     self.isloadingList = false
     self.table.reloadData()
} 

第三:实现增加页码的函数,调用当前页面的API函数。

func loadMoreItems(){
     currentPage += 1
     getFromServer(currentPage)
}

第四:当 scrollView 滚动时,您应该从 API 获取其他项目/列表。

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if (((scrollView.contentOffset.y + scrollView.frame.size.height) > scrollView.contentSize.height ) && !isLoadingList){
            self.isLoadingList = true
            self.loadMoreItems()
        }
    }

【讨论】:

  • 它工作正常,但是如果我在上面滚动,在上面滚动时数据不会加载
  • 查看answer
【解决方案2】:

您应该实现UITableViewDataSourcePrefetching protocol。该协议将帮助您通过新数据无缝填充表格

【讨论】:

  • 你能给我发一份演示如何做到这一点吗?
  • 可以看这个协议的实现例子here
【解决方案3】:

声明

当前页面 = 1

然后在viewController中添加这个方法

private func isLastCell(indexPath: IndexPath) -> Bool {
    print(indexPath)
    if array.count > 0 {
        return ((indexPath.section == sectionCount-1) && (indexPath.row == (array.count-1)))
    } else {
        return false
    }

}

然后在tableViewWillDisplayCell方法中添加这个函数

if array.count > 0, self.isLastCell(indexPath: indexPath) {
            self.currentPage += 1
            // call api here
  } 

对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多