如果在故事板中设置项目数,是否需要使用numberOfItemsInSection函数?

时间:2017-10-01 06:35:27

标签: swift xcode

UICollectionViews上有一些帖子,作为一般概念,我了解UICollectionViewsTableViews的实施方式类似。关于这个话题已有几篇帖子。

How to make a simple collection view with Swift

我使用UICollectionView布局8个单元格用于基本装饰目的......就像容纳页面的几个图像一样。图像并不意味着是交互式的,例如。购物车。

我的问题是,如果我在故事板上布置我的单元格,是否需要实现下面的功能(以及其他类似的功能)。

// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return self.items.count
}

我在故事板上配置了UICollectionView中的8个单元格(此集合视图是UIViewController上的视图),每个UICollectionViewCell都有一个带有的图像视图。我把这一切都放在了故事板上。

我也不想在每个单元格中放置图像。只是一定数量的cels,例如。细胞2,3,5和8。

所以我要做的是创建一个扩展UIControllerViewCell的类并为图像视图创建IBOutlet,然后在界面构建器中引用自定义单元类。

而且我认为 - 但可以做一些建议 - 然后我需要做的就是使用下面的函数,因为我只想填充某些单元格,我可以使用if语句作为索引路径,当它是2时,3,5和8:

// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

  if(indexPath == 2 || 3 || 5|| 8)
  {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell

        // Use the outlet in our custom class to get a reference to the UILabel in the cell
        cell.image = self.items[indexPath.item]


        return cell
  }
}

感谢。

2 个答案:

答案 0 :(得分:2)

cellForItemAt必须返回值(在这种情况下为UICollectionViewCell个实例),但您可以将某些单元格的图像设置为nil(AKA无图像)

例如:

// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! MyCollectionViewCell

    if([2,3,5,8].contains(indexPath.row))
    {
        // Use the outlet in our custom class to get a reference to the UIImageView in the cell
        cell.myImageView.image = self.items[indexPath.row]
    } else {
        cell.myImageView.image = nil
    }

    return cell
}

答案 1 :(得分:1)

听起来你问的是静态的UICollectionViewController是不可能的。您将在故事板中创建一个原型单元格,并将IBOutlets与所需的类链接起来。您还需要为UICollectionView实现数据源和委托方法。只需隐藏您不想根据索引显示的图片。