将静态单元格添加到 UICollectionView

Adding a static cell to a UICollectionView

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

我的方法是向我的 collectionView 添加两个部分,但我目前不知道如何 return 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
    }
}

这个问题是我必须 return 在函数末尾添加一个单元格。它似乎不会作为 if 条件的一部分被 returned。感谢您的帮助!

详细说明 Dan 的评论,函数必须 return UICollectionViewCell 的一个实例。目前,编译器可以看到 indexPath.section 既不是 0 也不是 1 的代码路径。如果发生这种情况,您的代码 return 就什么都不是了。这在您的应用中永远不会在逻辑上发生并不重要。

最简单的修复方法是将 "else if" 更改为 "else"。如:

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
    }
}

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