如何在没有故事板的情况下以编程方式将单元格添加到 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的主要内容,如果未能解决你的问题,请参考以下文章
Swift 4:将数据从集合视图单元传递到另一个没有故事板的视图控制器