UITableView Cell seleccionado Color?


319

He creado una costumbre UITableViewCell. La vista de tabla muestra datos bien. En lo que estoy atascado es cuando el usuario toca la celda de la vista de tabla, luego quiero mostrar el color de fondo de la celda que no sean los valores predeterminados [color azul] para resaltar la selección de la celda. Yo uso este código pero no pasa nada:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Respuestas:


365

Creo que estabas en el camino correcto, pero de acuerdo con la definición de clase para selectedBackgroundView:

El valor predeterminado es nulo para las celdas en las tablas de estilo plano (UITableViewStylePlain) y no nulo para las tablas de grupo de secciones UITableViewStyleGrouped).

Por lo tanto, si está utilizando una tabla de estilo plano, deberá asignar un nuevo inicio UIViewcon el color de fondo deseado y luego asignarlo selectedBackgroundView.

Alternativamente, puede usar:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

si todo lo que quería era un fondo gris cuando se selecciona la celda. Espero que esto ayude.


1
Esta propiedad también se puede establecer en el guión gráfico si prefiere dejar las cosas relacionadas con la vista a la vista.
IIllIIll

1
Versión Swift 3: cell.selectionStyle = .gray // También puedes usar .none, .blue o .default
Sébastien REMY el

66
Esta respuesta es bastante antigua ... ¿Se ha cambiado algo en las versiones más recientes de iOS? Tengo una tabla de estilo plano y mi vista de fondo seleccionada no es nula. Curiosamente, cambiar el backgroundColor en esta vista no tiene ningún efecto, en su lugar, tengo que reemplazarlo por una nueva UIView con mi backgroundColor deseado para que funcione.
ndreisg

Me salvaste de volverme completamente loco. ¡Muchas gracias!
mrwheet

656

No hay necesidad de celdas personalizadas. Si solo desea cambiar el color seleccionado de la celda, puede hacer esto:

C objetivo:

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor redColor];
[cell setSelectedBackgroundView:bgColorView];

Rápido:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView

47
Esto funciona, pero en un UITableView agrupado, las esquinas redondeadas se pierden.
David

1
@David ¿CornerRadius = 7 funciona en cualquier lugar de la vista de tabla agrupada? ¿Qué pasa si la celda está en el medio? No tengo tiempo para probar esto.
Maciej Swic

2
porque rápido es un pequeño error. La línea correcta es cell.selectedBackgroundView = bgColorView
John Kakon

13
Tenga en cuenta que para que esto funcione, en el Storyboard (o archivo XIB) debe seleccionar un color de Fondo seleccionado que no sea Ninguno. Esto es contrario a algunas respuestas que dicen que primero debe establecerlo en Ninguno para que funcione. Con None, no funcionará. Me estaba volviendo loco hasta que lo descubrí. Gracias.
kakubei

1
¿Cómo haría que esto funcione cuando también está usando storyboard?
Juan

42

El color de fondo de la selección de celda de Vista de tabla se puede configurar a través del Storyboard en Interface Builder:

color de selección de celda de vista de tabla Ninguno


1
Creo que no podemos establecer un color personalizado desde el guión gráfico. Necesito configurarlo programáticamente.
pallavi

37

Si tiene una tabla agrupada con solo una celda por sección, simplemente agregue esta línea adicional al código: bgColorView.layer.cornerRadius = 10;

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor redColor]];
bgColorView.layer.cornerRadius = 10;
[cell setSelectedBackgroundView:bgColorView];
[bgColorView release]; 

No olvides importar QuartzCore.


28

Swift 3: para mí funcionó cuando lo pones en el cellForRowAtIndexPath:método

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view

66
Creo que el mejor lugar para poner esto es el awakeFromNib()método (en el caso de una celda personalizada).
LembergSun

22

Lo siguiente funciona para mí en iOS 8.

Tengo que establecer 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. Parece haber un cambio en los comportamientos ya que las respuestas anteriores deben establecer el estilo en ninguno.

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;
}

Este código está perdiendo memoria. Cualquier creación de "alloc" u objeto debe estar en el bloque if (cell == nil) {}. O la vista se creará cada vez que iOS lance la celda.
GeneCode

18

Cree una celda personalizada para la celda de su tabla y en la celda personalizada class.m ponga el código a continuación, funcionará bien. Debe colocar la imagen de color deseada en selectionBackgroundUIImage.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}

2
Creo que esto podría ser más eficiente en la memoria que establecer una vista de fondo seleccionada al inicializar la celda creando solo la vista bg cuando se selecciona una celda.
dotslashlu

11

Extensión Swift 3.0

extension UITableViewCell {
    var selectionColor: UIColor {
        set {
            let view = UIView()
            view.backgroundColor = newValue
            self.selectedBackgroundView = view
        }
        get {
            return self.selectedBackgroundView?.backgroundColor ?? UIColor.clear
        }
    }
}

cell.selectionColor = UIColor.FormaCar.blue


1
add IBDesignable e IBInspectable
Michał Ziobro

1
@ MichałZiobro simplemente agregue @IBInspectablesobre la var si lo desea. @IBDesignableNo es útil para esto.
Nik Kov

9
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

Necesitamos establecer la vista de fondo seleccionada en este método.


8

Si desea agregar un color resaltado personalizado a su celda (y su celda contiene botones, etiquetas, imágenes, etc.), seguí los siguientes pasos:

Por ejemplo, si desea un color amarillo seleccionado:

1) Cree una vista que se ajuste a todas las celdas con un 20% de opacidad (con color amarillo) llamada, por ejemplo, backgroundselectedView

2) En el controlador de celda escriba esto:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
     self.backgroundselectedView.alpha=1;
    [super touchesBegan:touches withEvent:event];
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundselectedView.alpha=0;
    [super touchesEnded:touches withEvent:event];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.backgroundSelectedImage.alpha=0;
    [super touchesCancelled:touches withEvent:event];
}

8

En Swift 4, también puede establecer el color de fondo de la celda de su tabla globalmente (tomado de aquí ):

let backgroundColorView = UIView()
backgroundColorView.backgroundColor = UIColor.red
UITableViewCell.appearance().selectedBackgroundView = backgroundColorView

6

Si está utilizando un TableViewCell personalizado, también puede anular awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

1
Buena solución! Gracias
Thomás Calmon

Tengo una vista de tabla simple con no más de 10 celdas, esto funciona muy bien hasta ahora.
code4latte

5

Un consejo más sobre la forma en que Christian muestra el fondo de la esquina redondeada para la tabla agrupada.

Si lo uso cornerRadius = 10para la celda, muestra el fondo de selección redondeado de cuatro esquinas. No es lo mismo con la interfaz de usuario predeterminada de la vista de tabla.

Entonces, pienso en una manera fácil de resolverlo con cornerRadius . Como puede ver en los códigos a continuación, verifique la ubicación de la celda (superior, inferior, media o inferior) y agregue una subcapa más para ocultar la esquina superior o la esquina inferior. Esto solo muestra exactamente el mismo aspecto con el fondo de selección de la vista de tabla predeterminada.

Probé este código con iPad splitterview. Puede cambiar la posición del marco de patchLayer según lo necesite.

Avíseme si hay una forma más fácil de lograr el mismo resultado.

if (tableView.style == UITableViewStyleGrouped) 
{
    if (indexPath.row == 0) 
    {
        cellPosition = CellGroupPositionAtTop;
    }    
    else 
    {
        cellPosition = CellGroupPositionAtMiddle;
    }

    NSInteger numberOfRows = [tableView numberOfRowsInSection:indexPath.section];
    if (indexPath.row == numberOfRows - 1) 
    {
        if (cellPosition == CellGroupPositionAtTop) 
        {
            cellPosition = CellGroupPositionAtTopAndBottom;
        } 
        else 
        {
            cellPosition = CellGroupPositionAtBottom;
        }
    }

    if (cellPosition != CellGroupPositionAtMiddle) 
    {
        bgColorView.layer.cornerRadius = 10;
        CALayer *patchLayer;
        if (cellPosition == CellGroupPositionAtTop) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 10, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        } 
        else if (cellPosition == CellGroupPositionAtBottom) 
        {
            patchLayer = [CALayer layer];
            patchLayer.frame = CGRectMake(0, 0, 302, 35);
            patchLayer.backgroundColor = YOUR_BACKGROUND_COLOR;
            [bgColorView.layer addSublayer:patchLayer];
        }
    }
}

4

Quiero señalar que el editor XIB le ofrece las siguientes opciones estándar:

Sección: azul / gris / ninguno

(la columna de la derecha con opciones, 4ta pestaña, primer grupo "Celda de vista de tabla", 4to subgrupo, el 1er de 3 elementos lee "Selección")

Probablemente lo que quiere hacer se puede lograr seleccionando la opción estándar correcta.


tienes razón. Debido a esto, si lo hace, puede cambiar el color de selección en "cellForRowAtIndexPath" agregando: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[UIView alloc] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) verde: (0/255) azul: (0/255) alfa: 0.1];
user8675

¡GRACIAS! el camino a seguir
Fattie

3

Según el color personalizado para una celda seleccionada UITableView, gran solución según la respuesta de Maciej Swic

Solo para agregar a eso, declara la respuesta de Swic en la configuración de la celda generalmente en:

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

Y para un efecto adicional, en lugar de los colores del sistema, puede usar valores RGB para una apariencia de color personalizada. En mi código así es como lo logré:

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

} 

 static NSString *CellIdentifier = @"YourCustomCellName";
 MakanTableCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

// Configure the cell...

if (cell == nil) {

cell = [[[NSBundle mainBundle]loadNibNamed:@"YourCustomCellClassName" owner:self options:nil]objectAtIndex:0];
                    } 

UIView *bgColorView = [[UIView alloc] init];
bgColorView.backgroundColor = [UIColor colorWithRed:255.0/256.0 green:239.0/256.0 blue:49.0/256.0 alpha:1];
bgColorView.layer.cornerRadius = 7;
bgColorView.layer.masksToBounds = YES;
[cell setSelectedBackgroundView:bgColorView];


return cell;

}

Avísame si eso también funciona para ti. Puede jugar con el cornerRadiusnúmero de los efectos en las esquinas de la celda seleccionada.


3

Tengo un enfoque ligeramente diferente al de todos los demás que refleja la selección al tacto en lugar de después de haber sido seleccionado. Tengo una UITableViewCell subclasificada. Todo lo que tiene que hacer es establecer el color de fondo en los eventos táctiles, que simula la selección al tacto, y luego establecer el color de fondo en la función setSelected. Establecer el color de fondo en la función selSelected permite deseleccionar la celda. Asegúrese de pasar el evento táctil al super, de lo contrario la celda no actuará como si estuviera seleccionada.

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
    self.backgroundColor = UIColor(white: 0.0, alpha: 0.1)
    super.touchesBegan(touches, withEvent: event)
}

override func touchesCancelled(touches: NSSet!, withEvent event: UIEvent!) {
    self.backgroundColor = UIColor.clearColor()
    super.touchesCancelled(touches, withEvent: event)
}

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Configure the view for the selected state
    self.backgroundColor = selected ? UIColor(white: 0.0, alpha: 0.1) : UIColor.clearColor()
}

3

Para agregar el fondo para todas las celdas (usando la respuesta de Maciej):

for (int section = 0; section < [self.tableView numberOfSections]; section++) {
        for (int row = 0; row < [self.tableView numberOfRowsInSection:section]; row++) {
            NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:section];
            UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:cellPath];

            //stuff to do with each cell
            UIView *bgColorView = [[UIView alloc] init];
            bgColorView.backgroundColor = [UIColor redColor];
            [cell setSelectedBackgroundView:bgColorView];
        }
    } 

2

Para anular UITableViewCellque está setSelectedtambién funciona.

override func setSelected(selected: Bool, animated: Bool) {
    super.setSelected(selected, animated: animated)

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}

2

para aquellos que solo quieren deshacerse del fondo gris seleccionado por defecto, coloque esta línea de código en su función cellForRowAtIndexPath:

yourCell.selectionStyle = .None

1
muchas gracias, esta es la respuesta correcta para mí, no para los demás.
DeyaEldeen

Cómo configurar un color como "verde" en lugar de configurar ninguno o azul o gris.
Satyam

2

para Swift 3.0:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let cell = super.tableView(tableView, cellForRowAt: indexPath)

    cell.contentView.backgroundColor = UIColor.red
}

Agradable, pero funcionará solo después de que el usuario seleccione algo (el color de selección predeterminado permanecerá al inicio)
Konstantin Salavatov

2

Uso el siguiente enfoque y funciona bien para mí,

class MyTableViewCell : UITableViewCell {

                var defaultStateColor:UIColor?
                var hitStateColor:UIColor?

                 override func awakeFromNib(){
                     super.awakeFromNib()
                     self.selectionStyle = .None
                 }

// if you are overriding init you should set selectionStyle = .None

                override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let hitColor = hitStateColor {
                        self.contentView.backgroundColor = hitColor
                    }
                }

                override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }

                override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) {
                    if let defaultColor = defaultStateColor {
                        self.contentView.backgroundColor = defaultColor
                    }
                }
            }

2

Swift 4+:

Agregue las siguientes líneas en la celda de su tabla

let bgColorView = UIView()
bgColorView.backgroundColor =  .red
self.selectedBackgroundView = bgColorView

Finalmente debería ser como abajo

override func setSelected(_ selected: Bool, animated: Bool)
    {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
        let bgColorView = UIView()
        bgColorView.backgroundColor =  .red
        self.selectedBackgroundView = bgColorView

    }

1

Aquí están las partes importantes del código necesarias para una tabla agrupada. Cuando se selecciona cualquiera de las celdas de una sección, la primera fila cambia de color. Sin establecer inicialmente el estilo de selección de celda en ninguno, se produce una recarga doble anónima cuando el usuario hace clic en la fila 0 donde la celda cambia a bgColorView, luego se desvanece y vuelve a cargar bgColorView nuevamente. Buena suerte y avíseme si hay una manera más simple de hacer esto.

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

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    if ([indexPath row] == 0) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIView *bgColorView = [[UIView alloc] init];
        bgColorView.layer.cornerRadius = 7;
        bgColorView.layer.masksToBounds = YES;
        [bgColorView setBackgroundColor:[UIColor colorWithRed:.85 green:0 blue:0 alpha:1]];
        [cell setSelectedBackgroundView:bgColorView];

        UIColor *backColor = [UIColor colorWithRed:0 green:0 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithWhite:1 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row0";
    }
    else if ([indexPath row] == 1) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row1";
    }
    else if ([indexPath row] == 2) 
    {
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        UIColor *backColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
        cell.backgroundColor = backColor;
        UIColor *foreColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1];
        cell.textLabel.textColor = foreColor;

        cell.textLabel.text = @"row2";
    }
    return cell;
}

#pragma mark Table view delegate

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSIndexPath *path = [NSIndexPath indexPathForRow:0 inSection:[indexPath section]];
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:path];
    [cell setSelectionStyle:UITableViewCellSelectionStyleBlue];

    [tableView selectRowAtIndexPath:path animated:YES scrollPosition:UITableViewScrollPositionNone];

}

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

#pragma mark Table view Gestures

-(IBAction)singleTapFrom:(UIGestureRecognizer *)tapRecog
{

    CGPoint tapLoc = [tapRecog locationInView:tvStat];
    NSIndexPath *tapPath = [tvStat indexPathForRowAtPoint:tapLoc];

    NSIndexPath *seleRow = [tvStat indexPathForSelectedRow];
    if([seleRow section] != [tapPath section])
        [self tableView:tvStat didDeselectRowAtIndexPath:seleRow];
    else if (seleRow == nil )
        {}
    else if([seleRow section] == [tapPath section] || [seleRow length] != 0)
        return;

    if(!tapPath)
        [self.view endEditing:YES];

    [self tableView:tvStat didSelectRowAtIndexPath:tapPath];
}

1

En caso de clase de celda personalizada. Solo anular:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state

    if (selected) {
        [self setBackgroundColor: CELL_SELECTED_BG_COLOR];
        [self.contentView setBackgroundColor: CELL_SELECTED_BG_COLOR];
    }else{
        [self setBackgroundColor: [UIColor clearColor]];
        [self.contentView setBackgroundColor: [UIColor clearColor]];
    }
}

0

Es fácil cuando el estilo de vista de tabla es simple, pero en estilo grupal, es un pequeño problema, lo resuelvo de la siguiente manera:

CGFloat cellHeight = [self tableView:tableView heightForRowAtIndexPath:indexPath];
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kGroupTableViewCellWidth+2, cellHeight)];
view.backgroundColor = kCommonHighlightedColor;
cell.selectedBackgroundView = view;
[view release];
UIRectCorner cornerFlag = 0;
CGSize radii = CGSizeMake(0, 0);
NSInteger theLastRow = --> (yourDataSourceArray.count - 1);
if (indexPath.row == 0) {
    cornerFlag = UIRectCornerTopLeft | UIRectCornerTopRight;
    radii = CGSizeMake(10, 10);
} else if (indexPath.row == theLastRow) {
    cornerFlag = UIRectCornerBottomLeft | UIRectCornerBottomRight;
    radii = CGSizeMake(10, 10);
}
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:cornerFlag cornerRadii:radii];
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.path = maskPath.CGPath;
view.layer.mask = shapeLayer;

noté el kGroupTableViewCellWidth, lo defino como 300, es el ancho del ancho de celda de la vista de tabla de grupo en iPhone


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Asegúrese de haber usado la línea anterior para usar el efecto de selección


0
override func setSelected(selected: Bool, animated: Bool) {
    // Configure the view for the selected state

    super.setSelected(selected, animated: animated)
    let selView = UIView()

    selView.backgroundColor = UIColor( red: 5/255, green: 159/255, blue:223/255, alpha: 1.0 )
    self.selectedBackgroundView = selView
}

Agregue alguna explicación de su respuesta para que sea legible para todos los futuros lectores
techspider

0

Estoy usando iOS 9.3 y configurar el color a través del Storyboard o la configuración cell.selectionStyleno funcionó para mí, pero el siguiente código funcionó:

UIView *customColorView = [[UIView alloc] init];
customColorView.backgroundColor = [UIColor colorWithRed:55 / 255.0 
                                                  green:141 / 255.0 
                                                   blue:211 / 255.0 
                                                  alpha:1.0];
cell.selectedBackgroundView = customColorView;

return cell;

Encontré esta solución aquí .


0

Intenta seguir el código.

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[cellIdArray objectAtIndex:indexPath.row] forIndexPath:indexPath];

    // Configure the cell...
    cell.backgroundView =
    [[UIImageView alloc] init] ;
    cell.selectedBackgroundView =[[UIImageView alloc] init];

    UIImage *rowBackground;
    UIImage *selectionBackground;


    rowBackground = [UIImage imageNamed:@"cellBackgroundDarkGrey.png"];
    selectionBackground = [UIImage imageNamed:@"selectedMenu.png"];

    ((UIImageView *)cell.backgroundView).image = rowBackground;
    ((UIImageView *)cell.selectedBackgroundView).image = selectionBackground;



    return cell;
}

// Versión Swift:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


        let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! as UITableViewCell


        cell.selectedBackgroundView = UIImageView()
        cell.backgroundView=UIImageView()

        let selectedBackground : UIImageView = cell.selectedBackgroundView as! UIImageView
        selectedBackground.image = UIImage.init(named:"selected.png");

        let backGround : UIImageView = cell.backgroundView as! UIImageView
        backGround.image = UIImage.init(named:"defaultimage.png");

        return cell


    } 

0

Swift 4.x

Para cambiar el color de fondo de la selección a cualquier color, use la extensión Swift

Cree la extensión de celda UITableView como se muestra a continuación

extension UITableViewCell{

    func removeCellSelectionColour(){
        let clearView = UIView()
        clearView.backgroundColor = UIColor.clear
        UITableViewCell.appearance().selectedBackgroundView = clearView
    } 

}

Luego llame a removeCellSelectionColour () con instancia de celda.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.