【问题标题】:UITableView Pagination willDisplay call again and again swiftUITableView 分页 willDisplay 调用一次又一次 swift
【发布时间】:2018-07-15 10:35:47
【问题描述】:

我正在尝试在UITableView 中实现分页,在 stackoverflow 和谷歌上搜索了这个问题后,我得到了很多方法,但在所有解决方案中都面临同样的问题,在 willDisplay 最后一个单元格方法中一次又一次地调用,所以分页不起作用它加载在我移动到最后一个单元格之前循环中的数据请指导我 self.isGettingMoreData 在获取所有数据时为假。

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if !self.isGettingMoreData && indexPath.row >= (self.datasource.count - 1) {
            self.isGettingMoreData = true
             loadmore(pagenum)
        }
}

我正在使用这样的scrollview,但这样我需要在最后拖动以加载更多我不想这样的方式

func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {

        //Bottom Refresh

        if scrollView == table{

            if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height)
            {


                if !isLoading{

                    isLoading = true  
                     loadmore()

【问题讨论】:

  • 因为它的 tableView 委托方法,它将为每个即将显示的单元格调用。所以你只需要为最后一个单元格执行你的loadmore func。尝试改用indexPath.row == self.dataSource.count - 1)
  • 我觉得你的方法和我的方法没有区别
  • 在我到达最后一个单元格之前,一次又一次地调用 loadmore 方法
  • 如何更新数据源?
  • 我只是将数据附加到数据源中的数据中

标签: ios swift xcode uitableview pagination


【解决方案1】:

要在表格视图或集合视图中实现分页,您可以将代码放在 scrollViewDidScroll 方法中。这是我使用的示例代码:

func scrollViewDidScroll(_ scrollView: UIScrollView) {        

    if moreResultsAvailable {
        if let lastVisibleIndexPath = self.collectionView.indexPathsForVisibleItems.last {
            if let dataCount = dataArray.count {
                let dif = abs(dataCount - lastVisibleIndexPath.row)

                if dif == 0 {
                     pageNo += 1
                     fetchMoreData()
                }
            }
        }
    }
}

【讨论】:

  • 使用这种方法我必须拖动最后一个单元格,这不好我希望当我去最后一个单元格时它应该加载新数据
  • @Jhony 如果你想每次转到最后一个单元格时它应该加载新数据,你必须检查 if == 0 { fetchMoreData() },如果你想在滚动到最后一个之前获取新数据您需要检查的单元格是否 diff
  • 对于 indexPathsForVisibleItems,文档说:这个属性的值是一个未排序的 NSIndexPath 对象数组,每个对象对应于集合视图中的一个可见单元格。这意味着 .last 项目并不总是最后一个项目。这意味着您的代码仅在某些时候有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多