iphone uitableview customization selection

iphone - ¿Cómo cambiar el color de resaltado azul de una UITableViewCell?



customization selection (9)

Debo configurar el estilo de selección en UITableViewCellSelectionStyleDefault para que funcione el color de fondo personalizado. Si hay otro estilo, se ignorará el color de fondo personalizado. Probado en iOS 8.

El código completo para la celda de la siguiente manera:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"MyCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // This is how you change the background color cell.selectionStyle = UITableViewCellSelectionStyleDefault; UIView *bgColorView = [[UIView alloc] init]; bgColorView.backgroundColor = [UIColor redColor]; [cell setSelectedBackgroundView:bgColorView]; return cell; }

Me pregunto cómo cambiar el color azul de resaltado / selección de una UITableViewCell , alguna idea?


En Swift, use esto en cellForRowAtIndexPath

let selectedView = UIView() selectedView.backgroundColor = UIColor.white cell.selectedBackgroundView = selectedView

Si desea que su color de selección sea el mismo en cada UITableViewCell , utilícelo en AppDelegate .

let selectedView = UIView() selectedView.backgroundColor = UIColor.white UITableViewCell.appearance().selectedBackgroundView = selectedView


Puede cambiar el color de resaltado de varias maneras.

  1. Cambia la propiedad selectStyle de tu celda. Si lo cambia a UITableViewCellSelectionStyleGray , será gris.

  2. Cambie la propiedad selectedBackgroundView . En realidad, lo que crea el degradado azul es una vista. Puede crear una vista y dibujar lo que desee, y usar la vista como fondo de las celdas de la vista de tabla.


Si desea cambiarlo a toda la aplicación, puede agregar la lógica a su delegado de la aplicación

class AppDelegate: UIResponder, UIApplicationDelegate { //... truncated func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool { // set up your background color view let colorView = UIView() colorView.backgroundColor = UIColor.yellowColor() // use UITableViewCell.appearance() to configure // the default appearance of all UITableViewCells in your app UITableViewCell.appearance().selectedBackgroundView = colorView return true } //... truncated }


Zonble ya ha proporcionado una excelente respuesta. Pensé que podría ser útil incluir un fragmento de código corto para agregar una UIView a la celda de la vista de tabla que se presentará como la vista de fondo seleccionada.

cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; UIView *selectionColor = [[UIView alloc] init]; selectionColor.backgroundColor = [UIColor colorWithRed:(245/255.0) green:(245/255.0) blue:(245/255.0) alpha:1]; cell.selectedBackgroundView = selectionColor;

  • cell es mi UITableViewCell
  • Creé una UIView y establecí su color de fondo usando colores RGB (gris claro)
  • Luego configuré la celda selectedBackgroundView para que sea la UIView que creé con el color de fondo elegido

Esto funcionó bien para mí. Gracias por el consejo Zonble.


para completar: si creó su propia subclase de UITableViewCell puede implementar el - (void) setSelected: (BOOL) animado seleccionado: (BOOL) método animado, y establecer el color de fondo de alguna vista que haya agregado en la vista de contenido. (si ese es el caso) o de la propia viewViewView (si no está cubierto por una de sus propias vistas).

- (void)setSelected:(BOOL)selected animated:(BOOL)animated { if(selected) { self.contentView.backgroundColor = UIColor.blueColor; } else { self.contentView.backgroundColor = UIColor.whiteColor; } }

(no usó? para adaptarse al pequeño ancho del código fuente DIV''s :)

Este enfoque tiene dos ventajas sobre el uso de selectedBackgroundView, utiliza menos memoria y un poco menos de CPU, algo que ni siquiera notarías a menos que muestres cientos de celdas.


UITableViewCell tiene tres estilos de selección predeterminados:

  1. Azul
  2. gris
  3. Ninguna

La implementación es la siguiente:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; }


Swift 3.0 / 4.0

Si ha creado su propia celda personalizada, puede cambiar el color de selección en awakeFromNib() para todas las celdas:

override func awakeFromNib() { super.awakeFromNib() let colorView = UIView() colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4) self.selectedBackgroundView = colorView }


@IBDesignable class UIDesignableTableViewCell: UITableViewCell { @IBInspectable var selectedColor: UIColor = UIColor.clearColor() { didSet { selectedBackgroundView = UIView() selectedBackgroundView?.backgroundColor = selectedColor } } }

En su guión gráfico, establezca la clase de su UITableViewCell en UIDesignableTableViewCell, en el inspector de atributos, puede cambiar el color seleccionado de su celda a cualquier color.

Puede usar esto para todas sus celdas. Así es como se verá su inspector de Atributos.