如何在没有故事板的情况下以编程方式将单元格添加到 CollectionView

Posted

技术标签:

【中文标题】如何在没有故事板的情况下以编程方式将单元格添加到 CollectionView【英文标题】:How add cell to UICollectionView programatically without storyBoard 【发布时间】:2014-08-19 06:46:38 【问题描述】:

我尝试了以下代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath


    Pictograma *pictograma;

    pictograma = [pictogramas objectAtIndex:indexPath.row];

    AddPictogramaCell *newCell = [[AddPictogramaCell alloc] initWithFrame:CGRectMake(0, 0, 200, 200) pictograma:pictograma];

    [newCell.nombre setText:pictograma.nombre];
    [newCell.imageView setImage:[UIImage imageWithContentsOfFile:pictograma.path]];

    newCell.pictograma = pictograma;

    return newCell;

但我得到了错误:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason:
'the cell returned from -collectionView:cellForItemAtIndexPath: does not have a reuseIdentifier - cells must be retrieved by calling -
dequeueReusableCellWithReuseIdentifier:forIndexPath:'

我不使用故事板,所以我不知道如何解决这个问题。

【问题讨论】:

您要加载自定义 CollectionCell 吗? 【参考方案1】:

这里有两个问题。

首先,当您创建 collectionView 时,您需要添加这一行

[collectionView registerClass:[AddPictogramaCell class] forCellWithReuseIdentifier:@"YOUR_IDENTIFIER"];

然后在您的collectionView:cellForItemAtIndexPath: 中创建您的单元格,如下所示:

AddPictogramaCell *newCell = (AddPictogramaCell*)[collectionView dequeueReusableCellWithReuseIdentifier:@"YOUR_IDENTIFIER" forIndexPath:indexPath];

【讨论】:

目前方法是registerClass,没有更多的registerForClass【参考方案2】:

要在 Swift 中注册一个单元格以供重复使用,您可以在创建 CollectionView 时执行以下操作:

collectionView.registerClass(AddPictogramaCell, forCellWithReuseIdentifier: "YOUR_IDENTIFIER")

那么当你拿到你的手机时,你会有这样的东西:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 
  let cell:AddPictogramaCell = collectionView.dequeueReusableCellWithReuseIdentifier("", forIndexPath: indexPath) as! AddPictogramaCell

  return cell

【讨论】:

以上是关于如何在没有故事板的情况下以编程方式将单元格添加到 CollectionView的主要内容,如果未能解决你的问题,请参考以下文章

将自定义 UIView 添加到 TableViewCell

Swift 4:将数据从集合视图单元传递到另一个没有故事板的视图控制器

在单元格内编辑textview时,将另一个单元格添加到tableview

以编程方式将视图添加到表视图中的单元格

在没有按钮连接的情况下以编程方式执行 Segue?

带有故事板的自定义静态 TableView - 单元格背景