Célula UITableView selecionada Cor?

319

Eu criei um costume UITableViewCell. A visualização da tabela está mostrando dados bem. O que me impede é que, quando o usuário toca na célula da tableview, quero mostrar a cor de fundo da célula que não seja os valores padrão [cor azul] para destacar a seleção da célula. Eu uso esse código, mas nada acontece:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];
Momi
fonte

Respostas:

365

Eu acho que você estava no caminho certo, mas de acordo com a definição de classe para selectedBackgroundView:

O padrão é nulo para células em tabelas de estilo simples (UITableViewStylePlain) e não nulo para tabelas de grupo de seções UITableViewStyleGrouped).

Portanto, se você estiver usando uma tabela de estilo simples, precisará alocar-init um novo UIViewcom a cor de fundo desejada e atribuí-lo a selectedBackgroundView.

Como alternativa, você pode usar:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

se tudo o que você queria era um fundo cinza quando a célula é selecionada. Espero que isto ajude.

Andrew Little
fonte
1
Essa propriedade também pode ser definida no storyboard, se você preferir deixar coisas relacionadas à vista para a vista.
IIllIIll
1
Swift 3 Versão: cell.selectionStyle = .gray // Você também pode usar .none, .blue ou .default
Sébastien REMY
6
Esta resposta é bastante antiga ... Alguma coisa foi alterada nas versões mais recentes do iOS? Eu tenho uma tabela de estilo simples e meu selectedBackgroundView NÃO é nulo. Curiosamente, alterar o backgroundColor nessa exibição não tem nenhum efeito; em vez disso, tenho que substituí-lo por um novo UIView pelo meu backgroundColor desejado para fazê-lo funcionar.
Ndreisg 21/0318
Você acabou de me salvar de ficar completamente louco. Muito Obrigado!
Mrwheet 12/01/19
656

Não há necessidade de células personalizadas. Se você deseja alterar apenas a cor selecionada da célula, faça o seguinte:

Objetivo-C:

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

Rápido:

let bgColorView = UIView()
bgColorView.backgroundColor = UIColor.red
cell.selectedBackgroundView = bgColorView
Maciej Swic
fonte
47
Isso funciona, mas em um UITableView agrupado, os cantos arredondados são perdidos.
David
1
@ David O cornerRadius = 7 funciona em qualquer lugar da visualização da tabela agrupada? E se a célula estiver no meio? Não tenha tempo para testar isso.
Maciej Swic
2
pois rápido é pequeno erro. Linha correta é cell.selectedBackgroundView = bgColorView
John Kakon
13
Esteja ciente de que, para que isso funcione, no Storyboard (ou arquivo XIB), você deve selecionar uma cor de Fundo selecionado diferente de Nenhum. Isso é contrário a algumas respostas que dizem que você precisa primeiro defini-lo como None para que ele funcione. Com Nenhum, não vai funcionar. Estava me deixando louco até eu descobrir. Obrigado.
kakubei
1
Como você faria isso funcionar quando você também está usando o storyboard?
João
42

Exibição de tabela A cor de fundo da seleção de célula pode ser definida através do Storyboard no Interface Builder:

exibição de tabela cor de seleção de célula Nenhuma

pkamb
fonte
1
Acho que não podemos definir cores personalizadas no storyboard. Precisa configurá-lo programaticamente.
Pallavi
37

Se você possui uma tabela agrupada com apenas uma célula por seção, basta adicionar esta linha extra ao código: bgColorView.layer.cornerRadius = 10;

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

Não se esqueça de importar o QuartzCore.

Christian Fritz
fonte
28

Swift 3: para mim funcionou quando você o colocou no cellForRowAtIndexPath:método

let view = UIView()
view.backgroundColor = UIColor.red
cell.selectedBackgroundView = view
phitsch
fonte
6
Eu acho que o melhor lugar para colocar isso é o awakeFromNib()método (no caso de célula personalizada).
precisa saber é o seguinte
22

O seguinte funciona para mim no iOS 8.

Preciso definir o estilo de seleção para que UITableViewCellSelectionStyleDefaulta cor de plano de fundo personalizada funcione. Se houver outro estilo, a cor de plano de fundo personalizada será ignorada. Parece haver uma mudança de comportamento, pois as respostas anteriores precisam definir o estilo como nenhum.

O código completo da célula da seguinte maneira:

- (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;
}
samwize
fonte
Este código está vazando memória. Qualquer "alocação" ou criação de objeto deve estar no bloco if (cell == nil) {}. Ou a visualização será criada sempre que a célula for lançada pelo iOS.
GeneCode 12/02
18

Crie uma célula personalizada para a célula da tabela e, na célula personalizada class.m, coloque o código abaixo, ele funcionará bem. Você precisa colocar a imagem colorida desejada na selectionBackgroundUIImage.

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    UIImage *selectionBackground = [UIImage imageNamed:@"yellow_bar.png"];
    UIImageView *iview=[[UIImageView alloc] initWithImage:selectionBackground];
    self.selectedBackgroundView=iview;
}
rajesh
fonte
2
Eu acho que isso poderia ser mais eficiente em termos de memória do que definir um selectedBackgroundView ao inicializar a célula, criando apenas a visualização bg quando uma célula é selecionada.
dotslashlu
11

Extensão 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

Nik Kov
fonte
1
adicione IBDesignable e IBInspectable
Michał Ziobro
1
@ MichałZiobro basta adicionar @IBInspectablesobre o var, se quiser. @IBDesignablenão é útil para isso.
precisa
9
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIView *view = [[UIView alloc] init];
    [view setBackgroundColor:[UIColor redColor]];
    [cell setSelectedBackgroundView:view];
}

Precisamos definir a vista de fundo selecionada neste método.

Hemanshu Liya
fonte
8

Se você deseja adicionar uma cor destacada personalizada ao seu celular (e seu celular contém botões, rótulos, imagens etc.), segui as próximas etapas:

Por exemplo, se você deseja uma cor amarela selecionada:

1) Crie uma visualização que se ajuste a todas as células com 20% de opacidade (com cor amarela) chamada, por exemplo, backgroundselectedView

2) No controlador de célula, escreva isto:

- (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];
}
Javier Flores Font
fonte
8

No Swift 4, você também pode definir a cor de fundo da sua célula da tabela globalmente (extraída daqui ):

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

Se você estiver usando um TableViewCell personalizado, também poderá substituir awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

    // Set background color
    let view = UIView()
    view.backgroundColor = UIColor.redColor()
    selectedBackgroundView = view
}
Franck
fonte
1
Ótima solução! Obrigado
Thomás Calmon
Estou tendo uma simples visualização de tabela com não mais do que 10 células, isso funciona muito bem até agora.
code4latte
5

Mais uma dica da maneira de Christian mostrar o plano de fundo dos cantos arredondados para as mesas agrupadas.

Se eu usar o cornerRadius = 10celular, ele mostra o fundo de seleção arredondado dos quatro cantos. Não é o mesmo com a interface do usuário padrão da exibição de tabela.

Então, penso em uma maneira fácil de resolver isso com o cornerRadius . Como você pode ver nos códigos abaixo, verifique a localização da célula (superior, inferior, média ou superior) e adicione mais uma subcamada para ocultar o canto superior ou inferior. Isso mostra exatamente a mesma aparência com o fundo de seleção da exibição de tabela padrão.

Testei esse código com o iPad splitterview. Você pode alterar a posição do quadro do patchLayer conforme necessário.

Informe-me se houver uma maneira mais fácil de obter o mesmo 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];
        }
    }
}
Wonil
fonte
4

Quero observar que o editor XIB oferece as seguintes opções padrão:

Seção: azul / cinza / nenhum

(a coluna da direita com opções, 4ª guia, primeiro grupo "Célula de exibição de tabela", 4º subgrupo, o 1º de 3 itens lê "Seleção")

Provavelmente, o que você deseja fazer pode ser alcançado selecionando a opção padrão correta.

18446744073709551615
fonte
você está certo. Por isso, se você fizer isso, poderá alterar a cor da seleção em "cellForRowAtIndexPath" adicionando: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[alocação de UIView] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) verde: (0/255) azul: (0/255) alfa: 0.1];
user8675
OBRIGADO! o caminho a percorrer
Fattie
3

Conforme a cor personalizada de uma célula selecionada UITableView, ótima solução conforme a resposta de Maciej Swic

Apenas para adicionar a isso, você declara a resposta do Swic na configuração da célula geralmente em:

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

E para um efeito adicional, em vez das cores do sistema, você pode usar valores RGB para obter uma aparência de cor personalizada. No meu código, é assim que eu consegui:

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

}

Deixe-me saber se isso funciona para você também. Você pode mexer com o cornerRadiusnúmero dos efeitos nos cantos da célula selecionada.

DrBongo
fonte
3

Eu tenho uma abordagem um pouco diferente de todos os outros que reflete a seleção por toque, e não depois de ter sido selecionada. Eu tenho um UITableViewCell subclassed. Tudo o que você precisa fazer é definir a cor de fundo nos eventos de toque, que simula a seleção no toque e, em seguida, definir a cor de fundo na função setSelected. Definir a cor de fundo na função selSelected permite desmarcar a célula. Certifique-se de passar o evento de toque para o super, caso contrário, a célula não funcionará como se estivesse selecionada.

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()
}
Stephen Donnell
fonte
3

Para adicionar o plano de fundo para todas as células (usando a resposta 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];
        }
    } 
John
fonte
2

Para override UITableViewCellé setSelectedtambém 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
}
Quanlong
fonte
2

para aqueles que querem apenas se livrar do plano de fundo cinza selecionado padrão, coloque esta linha de código na função cellForRowAtIndexPath:

yourCell.selectionStyle = .None
Paul Lehn
fonte
1
muito obrigado, esta é a resposta certa para mim e para os outros.
precisa saber é o seguinte
Como definir uma cor como "verde" em vez de definir nenhuma ou azul ou cinza.
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
}
Wilson
fonte
Bom, mas só funcionará depois que o usuário selecione algo (cor seleção padrão permanecerá no início)
Konstantin Salavatov
2

Eu uso a abordagem abaixo e funciona bem para mim,

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
                    }
                }
            }
Suryavel TR
fonte
2

Swift 4+:

Adicione as seguintes linhas na sua célula da tabela

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

Finalmente deve ser como abaixo

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

    }
Rajesh Loganathan
fonte
1

Aqui estão as partes importantes do código necessárias para uma tabela agrupada. Quando qualquer uma das células em uma seção é selecionada, a primeira linha muda de cor. Sem definir inicialmente o estilo de seleção de células como nenhum, há um recarregamento duplo de anonimato quando o usuário clica na linha0 em que a célula muda para bgColorView e depois desbota e recarrega o bgColorView novamente. Boa sorte e deixe-me saber se existe uma maneira mais simples de fazer isso.

- (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];
}
firescar96
fonte
1

No caso de classe de célula personalizada. Apenas substitua:

- (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]];
    }
}
Lal Krishna
fonte
0

É fácil quando o estilo de exibição de tabela é simples, mas no estilo de grupo, é um pequeno problema, resolvo-o da seguinte maneira:

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;

observou o kGroupTableViewCellWidth, eu o defino como 300, é a largura da célula da visualização da tabela do grupo no iPhone

勇敢 的 心
fonte
0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Verifique se você usou a linha acima para usar o efeito de seleção

tushar
fonte
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
}
Ranjan
fonte
Por favor, adicione um pouco de explicação sobre a sua resposta para torná-lo legível para todos os futuros leitores
techspider
0

Estou usando o iOS 9.3 e definindo a cor através do Storyboard ou a configuração cell.selectionStylenão funcionou para mim, mas o código abaixo funcionou:

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;

Encontrei esta solução aqui .

Felipe Andrade
fonte
0

Tente Seguir o 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;
}

// Versão rápida:

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


    } 
Avijit Nagare
fonte
0

Swift 4.x

Para alterar a cor de fundo da seleção para qualquer cor, use a extensão rápida

Crie a extensão UITableView Cell como abaixo

extension UITableViewCell{

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

}

Em seguida, chame removeCellSelectionColour () com a instância da célula.

iSrinivasan27
fonte