如何在swift 3中的表视图单元格中实现集合视图的分页?

时间:2017-12-20 09:15:29

标签: ios uitableview swift3 uicollectionview

这里我有布局,其中我的一个表视图单元格由集合视图组成,在此我需要实现分页,我现在无法使用func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath)这个函数如何实现表视图的分页可以任何人帮助我如何实现这个来放置条件到达我的集合视图的最后一个元素,在这里我知道如何实现分页但如何调用需要重新加载的函数?

这是我的函数,用于检测最后一个单元格并使用以下函数重新加载数据

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
        let obj = items
        let lastElement = (obj.count) - 1
        print(lastElement)
        if !loadingData && indexPath.row == lastElement {
            loadingData = true
            guard let obj = self.listClassModel else { return }
            if ((obj.searchCriteria.pageSize as? Int) != nil) {
                self.collectionView.bottomRefreshControl?.beginRefreshing()
                let viewController = HomeViewController()
                viewController.loadMoreData()
            }
        }
func loadMoreData() {
        DispatchQueue.global(qos: .background).async {
            guard let obj = self.listClassModel else { return }
            let  totalItems = obj.totalCount
            let numberOfItems = obj.searchCriteria.pageSize as! Int
            let float = Float(totalItems)/Float(numberOfItems)
            print(float)
            let totalPages = Int(ceil(float))
            print(self.count)
            if totalPages != self.count {
                self.index += 1
                self.count += 1
                print(self.count)
                    let batchSize = 10
                    let sortField = "name"
                    let sortOrder = "ASC"
                    let conditionType = "eq"
                    let categoryId = 1
                    self.listCategoryDownloadJsonWithURL(listUrl: listUrlWithParameters)
            }
            else {
                self.loadingData = false
            }
            DispatchQueue.main.async {
                // this runs on the main queue
                self.loadingData = false
            }

        }
    }

1 个答案:

答案 0 :(得分:0)

  1. 将表格视图行高设置为自动尺寸
  2. tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 44

    2.为tableViewCell中的collectionView的高度创建IBOutlet。为tableViewCell中的collectionView设置前导,尾随,顶部,底部约束。

    3.在tableViewCell下创建collectionView的出口(如objCollectionView)并在cellForRowAt indexPath方法中添加以下代码

    func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - > UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath) as! tableCell
    
        cell.frame = tableView.bounds
        cell.layoutIfNeeded()
        cell.objCollectionView.reloadData()
    
        cell.objCollectionViewHeightConstraint.constant = cell.objCollectionView.contentSize.height
        return cell;
    

    }

    这将自动调整tableViewCell的高度取决于它的内容。