2010-03-31 31 views

Respuesta

200

Puede cambiar el color de resaltado de varias maneras.

  1. Cambie la propiedad de selección de estilo de su celda. Si lo cambia a UITableViewCellSelectionStyleGray, será gris.

  2. Cambia 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.

+8

fresco, que se encuentra una buena explicación y ejemplo aquí: http: //cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html –

+1

Me di cuenta de que en IB no puede configurar el UITableViewCell "Selectio n "a" None "- porque' selectedBackgroundView' simplemente nunca aparecerá. Solo después de configurar "Selección" a Predeterminado, aparece el 'selectedBackgroundView'. Probado en iOS 6 y 7. – Jonny

+11

¡Gracias por la gran nota! Esto lo hace tan simple ahora: crea una nueva vista (no necesita especificar el marco: 'cell.selectedBackgroundView = [UIView new];' y establece el color que desee: 'cell.selectedBackgroundView.backgroundColor = [UIColor colorWithHex : @ "ecf2f5" andAlpha: 1]; ' –

29

UITableViewCell tiene tres estilos de selección por defecto: -

  1. azul
  2. grises
  3. Ninguno

implementación es el siguiente: -

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath { 

    [cell setSelectionStyle:UITableViewCellSelectionStyleNone];  
} 
+7

en lugar de estos tres estilos predeterminados, también podemos personalizar nuestro estilo esperado mediante la propiedad SelectedBackgroundView. –

+0

Funcionó para mí ... Gracias ton. –

139

Zonble ya ha proporcionado una excelente respuesta. Pensé que podría ser útil incluir un fragmento de código corto para agregar un UIView a la celda de 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; 
  • celular es mi UITableViewCell
  • creé un UIView y establecer su color de fondo con los colores RGB (gris claro)
  • entonces me puse la célula selectedBackgroundView ser el UIView que creé con mi color de fondo elegido

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

+2

Esto no funciona demasiado bien cuando Usar vistas de tabla con secciones Cuando se selecciona, la celda perderá los bordes y no se redondeará cuando la primera o la última celda. –

+7

@kirk, quiere decir agrupados :) – Tieme

+0

@Tieme, no, me refiero a [secciones] (http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html): "Una vista de tabla se compone de cero o más secciones, cada una con sus propias filas". –

14

Si desea cambiarlo aplicación amplia, se puede añadir la lógica de su aplicación Delegado

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 
} 
+0

Perfecto. ¿Alguna idea de cómo establecer el color del texto de esa celda predeterminada globalmente en select? – BananaAcid

+1

esto funciona, pero luego la selección se borra directamente al presionar el nuevo controlador de vista. – bobmoff

+0

Una buena manera de realizar cambios globales en UITableViewCell – Shashi3456643

7

tengo que configurar el estilo de selección para UITableViewCellSelectionStyleDefault para el color de fondo personalizado para trabajar. 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; 
} 
9

esté completo: si ha creado su propia subclase de UITableViewCell se puede implementar el - (void) setSelected: (BOOL) seleccionado animado: (BOOL) método animado, y establecer el color de fondo de alguna vista que ha agregado en la vista de contenido. (Si ese es el caso) o de la propia contentView (si no está cubierto por uno de sus propios puntos de vista.

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

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

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 si no mostraras cientos de celdas.

+0

Esto funciona solo después de asignar una nueva vista al 'selectedBackgroundView' Al comienzo del método agrega 'self. selectedBackgroundView = [UIView new]; ' – enadun

7

En Swift, utilizar esto en cellForRowAtIndexPath

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

Si usted quiere que su color de selección sea la misma en cada uso UITableViewCell, esto en AppDelegate.

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

En el guión gráfico, defina la clase de su UITableViewCell a UIDesignableTableViewCell, en el inspector de atributos, es posible cambiar el color de la celda seleccionada a cualquier color.

Puede usarlo para todas sus celdas. Así se verá su inspector de Atributos.

This is how your Attributes inspector will look like

+0

¡Muy creativo! ¡estupendo! –

0

Swift 3,0/4,0

Si ha creado su propia celda personalizado se puede cambiar el color de selección en awakeFromNib() para todas las células:

override func awakeFromNib() { 
    super.awakeFromNib() 

    let colorView = UIView() 
    colorView.backgroundColor = UIColor.orange.withAlphaComponent(0.4) 

    self.selectedBackgroundView = colorView 


} 
Cuestiones relacionadas