将静态单元格添加到UICollectionView

时间:2016-03-22 05:03:43

标签: ios swift uicollectionview cell collectionview

我有一个显示数组中单元格的UICollectionView。我希望第一个单元格是一个静态单元格,用作提示进入创建流程(最终添加一个新单元格)。

我的方法是在我的collectionView中添加两个部分,但是如果我这样做的话,我目前无法弄清楚如何在cellForItemAtIndexPath中返回一个单元格。这是我的尝试:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if indexPath.section == 0 {
        let firstCell = collectionView.dequeueReusableCellWithReuseIdentifier("createCell", forIndexPath: indexPath) as! CreateCollectionViewCell
        firstCell.imageView.backgroundColor = UIColor(white: 0, alpha: 1)
        return firstCell
    } else if indexPath.section == 1 {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("mainCell", forIndexPath: indexPath) as! MainCollectionViewCell
        cell.imageView?.image = self.imageArray[indexPath.row]
        return cell
    }
}

这个问题是我必须在函数末尾返回一个单元格。它似乎不会作为if条件的一部分返回。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

详细说明Dan的评论,该函数必须返回UICollectionViewCell的实例。目前,编译器可以看到indexPath.section既不是0也不是1的代码路径。如果发生这种情况,则代码不返回任何内容。在您的应用中,这绝不会在逻辑上发生,这并不重要。

解决这个问题最简单的方法就是改变"否则如果"到了"否则"。如:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    if indexPath.section == 0 {
        let firstCell = collectionView.dequeueReusableCellWithReuseIdentifier("createCell", forIndexPath: indexPath) as! CreateCollectionViewCell
        firstCell.imageView.backgroundColor = UIColor(white: 0, alpha: 1)
        return firstCell
    } else { // This means indexPath.section == 1
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("mainCell", forIndexPath: indexPath) as! MainCollectionViewCell
        cell.imageView?.image = self.imageArray[indexPath.row]
        return cell
    }
}

现在如果只有两个代码路径,并且都返回一个单元格,那么编译器会更快乐。