以编程方式将按钮添加到集合视图单元格

Posted

技术标签:

【中文标题】以编程方式将按钮添加到集合视图单元格【英文标题】:Programmatically Adding Button To Collection View Cell 【发布时间】:2013-04-04 20:52:58 【问题描述】:

我在 Xcode 4.6 中有一个应用程序。在一个视图控制器中,我有一个集合视图。通过用户与视图的交互将单元格添加到视图中。这工作正常。然后我想向每个单元格添加一个按钮(以编程方式),以允许删除该单元格。我希望按钮位于每个单元格的右上角。问题是按钮出现在集合视图第一行中所有单元格的每个单元格内的所需位置(再次,右上角),但随后出现在第一行之后的所有单元格的单元格之外。见下图:

我的按钮创建方法是:

-(CollectionViewCellButton *)makeDeleteButtonForCell:(UICollectionViewCell *)cell

  CollectionViewCellButton *button = [CollectionViewCellButton buttonWithType:UIButtonTypeCustom];
  CGSize newImageSize = CGSizeMake(cell.frame.size.width/2.5, cell.frame.size.height/2.5);
  UIImage *image = [SeeYourAlbumViewController imageWithImage:[UIImage imageNamed:@"delete"] scaledToSize:newImageSize];

  CGFloat width = image.size.width;
  CGFloat height = image.size.height;
  CGFloat X = cell.frame.size.width - width;
  CGFloat Y = cell.frame.origin.y;

  button.frame = CGRectMake(X, Y, width, height);
  [button setImage:image forState:UIControlStateNormal];
  [button addTarget:self
           action:@selector(deleteCollectionViewCell:)
   forControlEvents:UIControlEventTouchUpInside];

  return button;

上述方法在我的cell创建方法中调用如下:

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

  UICollectionViewCell *cell = [collectionView
                              dequeueReusableCellWithReuseIdentifier:@"newCell"
                              forIndexPath:indexPath];

  //CALLED HERE!!
  CollectionViewCellButton *cellButton = [self makeDeleteButtonForCell:cell]; 

  cellButton.indexPath = indexPath;
  [cell addSubview:[self.pictures objectAtIndex:indexPath.row]]; 
  [cell addSubview:cellButton];

  return cell;

谁能建议我做错了什么?

【问题讨论】:

【参考方案1】:

按钮被添加为单元格的子视图。它应该使用单元格的坐标系(边界),而不是单元格的超级视图(框架)的坐标系。在您的情况下,由于按钮位于单元格集的顶部

CGFloat Y = 0;

【讨论】:

以上是关于以编程方式将按钮添加到集合视图单元格的主要内容,如果未能解决你的问题,请参考以下文章

为啥在集合视图单元格中以编程方式创建的按钮需要是惰性变量?

以编程方式向表格视图单元格添加按钮[关闭]

以编程方式选择单元格并转到 tabbarcontroller

以编程方式创建形状视图并在集合视图单元格上使用

以编程方式将 UIImage 添加到集合视图单元中

使用子视图重用单元格(以编程方式)