一个UIViewController中有两个UICollectionView和两个UICollectionViewCell

时间:2014-10-02 04:03:11

标签: ios swift uicollectionview

我的故事板上有两个UICollectionView,每个都有自己的插座:

@IBOutlet weak var daysCollectionView: UICollectionView!
@IBOutlet weak var hoursCollectionView: UICollectionView!

在每个集合视图中,我想使用不同类型的单元格。所以我创建了一个DayCell类和一个HourCell类。

然后在cellForItemAtIndexPath:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
{ 
    if collectionView == self.dayCollectionView 
    {
       let cell = collectionView.dequeueReusableCellWithReuseIdentifier("dayCell", forIndexPath: indexPath) as DayCell
       ...
       return cell
    } 
   else if collectionView == self.hourCollectionView 
   {
       let cell: HourCell = collectionView.dequeueReusableCellWithReuseIdentifier("hourCell", forIndexPath: indexPath) as HourCell
        ...
    return cell
    }
}

我收到编译错误

  

在预期返回UITableCellView"。

的函数中缺少返回

我完全遗漏了某些内容,或者if语句中的返回值是否在这种情况下不起作用?

或者我只是这样做完全错了?这似乎是每个人都在暗示的答案。我无法让它发挥作用。

1 个答案:

答案 0 :(得分:3)

这是因为您的代码中的if条件并非“详尽无遗”。即,存在执行可以到达功能结束并且无法返回单元的情况。 (例如,您可以在将来引入其他集合视图)

这是一个最简单的修复:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if collectionView == self.dayCollectionView {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("dayCell", forIndexPath: indexPath) as DayCell
        ...
       return cell
    } else { // do not do this check: if collectionView == self.hourCollectionView {
       let cell: HourCell = collectionView.dequeueReusableCellWithReuseIdentifier("hourCell", forIndexPath: indexPath) as HourCell
        ...
        return cell
    }
}