UITableViewCell background personalizado seleccionado BackgroundView es transparente

Tengo el siguiente código que crea una UIView que asigno a la propiedad selectedBackgroundView UITableViewCell . Todo funciona como se espera, con la exception del background de la subvista, que es transparente.

Utilizo el mismo código para crear una vista personalizada que asigno a backgroundView , y que funciona bien.

¿Qué causa que la subvista sea transparente para selectedBackgroundView y cómo puedo evitarlo?

 - (UIView*) makeSelectedBackgroundView { // dimensions only for relative layout CGRect containerFrame = CGRectMake(0, 0, 320, 40); UIView* containerView = [[UIView alloc] initWithFrame:containerFrame]; containerView.autoresizesSubviews = YES; // dimensions only for relative layout CGRect subframe = CGRectMake(5, 5, 310, 30); UIView* subview = [[UIView alloc] initWithFrame:subframe]; subview.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; subview.backgroundColor = [UIColor networkingColor]; subview.layer.cornerRadius = 5; subview.layer.borderWidth = 2; subview.layer.borderColor = [UIColor greenColor].CGColor; [containerView addSubview:subview]; return containerView; } 

Como podemos ver en el nombre de ivar selectedBackgroundView, este background se muestra por celda cuando se seleccionó.
Debo recargar algunos methods ( – setSelected: animated: y – setHighlighted: animated 🙂 de la subclass UITableViewCell para restablecer el color de background de las subvenciones a sus valores. Parece que UIKit hace algo de magic en estos methods de plantilla (itera sobre todas las subclasss UIView y establece su background en clearColor )

Este código podría ser útil para usted:

 UIImageView *cellImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, cell.frame.size.width, cell.frame.size.height )]; cellImageView.contentMode = UIViewContentModeScaleAspectFit; // normal background view [cellImageView setImage:[UIImage imageNamed:@"*<ImageName>*"]]; [cell addSubview:cellImageView]; [cell sendSubviewToBack:cellImageView]; [cellImageView release], cellImageView = nil; 

Aquí, la cell es un object de UITableViewCell personalizado.

También puede establecer backgroundColor propiedad backgroundColor .

Intentaría configurar el alpha para containerView y subView a 1.0

 [containerView setAlpha:1.0]; ... [subview setAlpha:1.0]; 

esto debería hacer que sus controles sean totalmente opacos.

También puede crear algunas imágenes para el background y usarlas en estado de crear 2 vistas. Digamos que crea 2 imágenes (normalBackground.png y selectedBackground.png) y luego establece estas imágenes como background de celda. Aquí hay un bonito tutorial.

Pruebe setOpaque:YES en sus vistas.

Al final, terminé subclassando UITableViewCell que contenía un object de vista personalizado, y eso funcionó.