2

Xcode 4.6 にアプリケーションがあります。1 つのビュー コントローラーには、コレクション ビューがあります。セルは、ユーザーがビューを操作することによってビューに追加されます。これはうまくいきます。次に、セルを削除できるようにするボタンを各セルに (プログラムで) 追加したいと考えました。ボタンを各セルの右上隅に配置したかったのです。問題は、ボタンがコレクション ビューの最初の行 (右上) のすべてのセルの各セル内の目的の場所に表示されるが、最初の行の後のすべてのセルのセルの外側に表示されることです。下の画像を参照してください。ここに画像の説明を入力

私のボタン作成方法は次のとおりです。

-(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;

}

上記のメソッドは、私のセル作成メソッドで次のように呼び出されます。

-(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;
}

誰かが私が間違っているかもしれないことを提案できますか?

4

1 に答える 1

1

ボタンはセルのサブビューとして追加されます。セルのスーパービュー (フレーム) の座標系ではなく、セルの座標系 (境界) を使用する必要があります。あなたの場合、ボタンはセルセットの一番上にあるので

CGFloat Y = 0;
于 2013-04-04T21:18:52.773 に答える