UICollectionView Cell con image, cambie de background con clic

Tengo una UICollectionView con Custom CollectionView Cells . En cada celda hay una image, que es tan grande como toda la celda. Ahora quiero resaltar la celda cuando el usuario toca la celda. Primero lo probé con los siguientes delegate Methods :

 - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell* cell = [self.collectionView cellForItemAtIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor networkingColor]; } - (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; cell.contentView.backgroundColor = [UIColor clearColor]; } 

Pero nada sucedió. Después de eliminar las imágenes de las celdas, funcionó perfectamente. ¡Pero con las imágenes no pasa nada! ¿Que más puedo hacer?

Si tiene una CustomCell, debe tener un CustomCell.m (file de implementación). En este file agrega esto, para mí es la manera fácil:

 -(void)setHighlighted:(BOOL)highlighted { if (highlighted) { self.layer.opacity = 0.6; // Here what do you want. } else{ self.layer.opacity = 1.0; // Here all change need go back } } 

Aquí coloca la image en todo sobre la celda, por lo que la celda está detrás de la image, no puede ver el background de la celda debido a la image. Es mejor tomar dos imágenes una para image destacada y otra para normal. eliminar esta línea

 cell.contentView.backgroundColor = [UIColor networkingColor]; 

establezca la image resaltada de la siguiente manera:

 - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell* cell = [self.collectionView cellForItemAtIndexPath:indexPath]; UIImage *image11 = [UIImage imageNamed:@"your_highlighted_image"]; CGRect starFrame1 = CGRectMake(0, 0, 350, 50); UIImageView *starImage2 = [[UIImageView alloc] initWithFrame:starFrame1]; starImage2.image= image11; //set this image as cell background [cell setBackgroundView:starImage2]; } 

configure la image normal de la siguiente manera:

 - (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *cell = [self.collectionView cellForItemAtIndexPath:indexPath]; UIImage *image11 = [UIImage imageNamed:@"your_normal_image"]; CGRect starFrame1 = CGRectMake(0, 0, 350, 50); UIImageView *starImage2 = [[UIImageView alloc] initWithFrame:starFrame1]; starImage2.image= image11; //set this image as cell background [cell setBackgroundView:starImage2]; } 

Intente así

 - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{ UICollectionViewCell *selectedCell = [collectionView cellForItemAtIndexPath:indexPath]; selectedCell.contentView.backgroundColor = nil; [selectedCell.contentView.layer setBorderColor:[UIColor networkingColor].CGColor]; [selectedCell.contentView.layer setBorderWidth:3.0f]; } - (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath { UICollectionViewCell *deselectedCell = [collectionView cellForItemAtIndexPath:indexPath]; deselectedCell.contentView.backgroundColor = nil; [deselectedCell.contentView.layer setBorderColor:[UIColor clearColor].CGColor]; [deselectedCell.contentView.layer setBorderWidth:3.0f]; } 

Versión rápida de la respuesta aceptada

 class MyCollectionViewCell: UICollectionViewCell { override var highlighted: Bool { didSet { if (highlighted) { self.layer.opacity = 0.6; } else { self.layer.opacity = 1.0; } } } } 

Fuente

Estoy publicando esta respuesta en beneficio de otros, pero no estoy completamente satisfecho con ella. Aquí hay dos problemas que he encontrado en mi observación inicial:

  1. La regulación es brusca y no está animada como un UIButton .
  2. Los botones en la primera columna no cambian de apariencia en absoluto. Tal vez esto sea un error en mi aplicación y no relacionado con este método real. Confirma o niega esto en los comentarios.