如何为单个UICollectionView使用两种类型的UICollectionViewCell?

时间:2015-07-16 06:43:33

标签: ios objective-c

我想在我的UICollectionVIewCell添加另一个自定义UICollectionView。所以我现在在同一个collectionView中有两个自定义单元格。我放入的所有delegate方法都是针对第一个collectionViewCell(collectionVIewCellA)。

我已将collectionViewCellB添加到我的故事板中,但不确定如何告诉viewController这个新的自定义单元格并对其进行配置。有没有人这样做过?

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您可以通过

执行此操作
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
                  cellForItemAtIndexPath:(NSIndexPath *)indexPath {

     if (condition for cellA) {
          //dequeue cell with cell A identifier
          //configure cell
     } else {
          //dequeue cell with cell B identifier
          //configure cell
     }
}

假设集合视图单元格A和B在故事板中配置了不同的重用标识符。

您可以在sizeForItemAtIndexPath委托方法中使用相同的逻辑来更新高度取决于单元格

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

答案 1 :(得分:0)

你在collectionView cellForItemAtIndexPath这样的委托方法中设置条件。

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    // your cell condition here
    if (self.isMainMenu) {
        MainCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"MainCell" forIndexPath:indexPath];
   if(cell!=nil){// cell nil condition
   }
// cell coding here

return cell;
    }
    else{
    // second custom cell code here
        ItemCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"ItemCell" forIndexPath:indexPath];
        // cell coding here
        return cell;
    }
}

增加细胞高度

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if(first cell condition)
    {        
        return CGSizeMake((collectionView.frame.size.width/4)-5, (collectionView.frame.size.width/4)-5);// your required height
    }
    else{
         return CGSizeMake((collectionView.frame.size.width/4)-5, (collectionView.frame.size.width/4)-5);// your required height
    }

}