Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding a UIButton to a UICollectionView cell programmatically

I have a UIViewController with a UICollectionView created inside it programmatically. I want to add a button to the cell:

viewDidLoad:

UICollectionViewLayout *layout = [[UICollectionViewFlowLayout alloc]init];
_collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:layout];

    [_collectionView setDataSource:self];
    [_collectionView setDelegate:self];

    [_collectionView registerClass:[EMCell class] forCellWithReuseIdentifier:@"Cell"];

    [self.view addSubview:_collectionView];

And then:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    EMCell *cell = (EMCell *)[collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];

    cell.backgroundColor = [UIColor greenColor];

    UIButton *button = (UIButton *)[cell viewWithTag:200];
    [button setFrame:CGRectMake(10, 10, 50, 60)];
    [button setTitle:@"Button" forState:UIControlStateNormal];

    [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];

    [cell addSubview:button];
    return cell;
}

What am I doing wrong?

like image 809
Oscar Swanros Avatar asked Jul 24 '13 19:07

Oscar Swanros


1 Answers

Add your button as a subview of cell.contentView. Also, don't create the button every time collectionView:cellForItemAtIndexPath: is called. You might be reusing an existing cell that already has a button. Better to add the button in your custom cell's init method instead. Then just hide the button when you don't need it.

like image 194
rob mayoff Avatar answered Nov 06 '22 09:11

rob mayoff