我有一个显示数组中单元格的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条件的一部分返回。谢谢你的帮助!
答案 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
}
}
现在如果只有两个代码路径,并且都返回一个单元格,那么编译器会更快乐。