Swift独立填充集合视图的每个部分

时间:2017-02-16 19:58:18

标签: ios swift uitableview collections uicollectionview

我有一个嵌入在表视图中的集合视图,因此它可以垂直和水平滚动。它有四个部分,今天,本周,本月,今年。我无法理解如何使用自己的数据填充每个部分。现在我使用下面的代码填充集合视图,但所有部分都有相同的数据。如何使用自己的数据填充每个部分?

因此,如果我有今天的图像数组,本周的图像数组,本月的图像数组,以及今年的图像数组,如何将图像视图的部分设置为相应数组中的项目?所以今天应该在todayImageArray中有图像,本周应该有thisWeekImageArray中的图像等等。

此外,我将集合视图的委托和数据源设置为表视图。

非常感谢任何帮助!

let images: [[UIImage]] = [
    [image_1, image_2, image_3, image_4],
    [image_5, image_6, image_7, image_8],
    [image_9, image_10, image_11, image_12],
    [image_13, image_14, image_15, image_16]
]    

func numberOfSections(in collectionView: UICollectionView) -> Int {
    return images.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return images[section].count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! ImageCollectionViewCell

    cell.imageView.image = images[indexPath.section][indexPath.row]

    return cell
}

2 个答案:

答案 0 :(得分:5)

您需要结构化数据源。目前,从您的代码中,您看起来只有一个名为images的数组,并且您正在使用它来提供项目数量以及更新单元格内容。但是,如果您需要单独的部分,则需要对数据源进行建模,并在collectionView中为数据源和委托方法提供逻辑响应。

示例简单数据源:

let simpleDataSource: [[UIImage]] = [
  [image1, image2],
  [image3, image4],
  [image5, image6]
]

在collectionView方法中使用它的示例:

func numberOfSections(in collectionView: UICollectionView) -> Int {
  return simpleDataSource.count
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return simpleDataSource[section].count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! ImageCollectionViewCell
  cell.imageView.image = simpleDataSource[indexPath.section][indexPath.row]
  return cell
}

您还应该阅读documentation for UICollectionView

答案 1 :(得分:0)

设置一个包含所有图片的数组,或者更好的结构,旨在更好地整理您的信息,或者像我的示例中那样使用图片名称,然后使用jQuerynumberOfSections属性进行分配那些图片:

indexPath.section