表格视图内的集合视图

时间:2018-09-03 08:14:57

标签: swift uitableview uicollectionview

我在应用程序中有以下实现,其中有一个表视图,其中每个表视图单元格都包含一个集合视图。

enter image description here

在这里,集合视图中单元格的数量将取决于表视图单元格中的数据,并且每一行都会有所不同。例如,第一行有3张卡片,第二行有1张卡片,第三行有2张卡片。

问题是我要获得3个集合视图单元,而不是第二个单元中的1个。

表格视图

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return self.groupedJobIds.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if let cell = tableView.dequeueReusableCell(withIdentifier: JobTableViewCellCollection.CellReuseIdentifier) as? JobTableViewCellCollection {
        var jobIds = self.groupedJobIds[indexPath.row]
        cell.delegate = self
        if jobIds != [] {
            cell.bindJobs(jobIds)
        }
        return cell
    }
    return UITableViewCell()
}

Tableview单元格/“收藏夹”视图

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.jobIds.count  //It returns 1
}

//This method is called 3 times
func collectionView(_ collectionView: UICollectionView,
                    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: JobCollectionViewCell.CellReuseIdentifier, for: indexPath) as? JobCollectionViewCell
    cell?.delegate = self
    cell?.bindJob(jobId)
    return cell!
}

如您所见,第一个方法返回1作为numberOfItemsInSection。但是第二种方法称为3次。我想念什么吗?

3 个答案:

答案 0 :(得分:0)

我认为您正在使用表视图的dequeueReusableCell方法,这引起了问题。 每次加载时,您能否在表视图上尝试新的集合视图?

答案 1 :(得分:0)

您应该从正确的来源填充UICollectionView。在您的代码中,您将填充来自同一self.groupedJobIds的所有集合视图单元格。您应该从表视图单元格中绑定的jobId填充集合视图,或者在UIViewController中保留一个jobId组数组,然后从那里填充。

答案 2 :(得分:0)

我找到了解决方案。我错过了导致问题的集合视图上的 reloadData()