UITableView Cell couleur sélectionnée?


319

J'ai créé une coutume UITableViewCell. La vue sous forme de tableau affiche les données correctement. Ce que je suis coincé, c'est lorsque l'utilisateur touche la cellule de la vue de table, puis je veux afficher la couleur d'arrière-plan de la cellule autre que les valeurs par défaut [couleur bleue] pour mettre en surbrillance la sélection de la cellule. J'utilise ce code mais rien ne se passe:

cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];

Réponses:


365

Je pense que vous étiez sur la bonne voie, mais selon la définition de classe pour selectedBackgroundView:

La valeur par défaut est nil pour les cellules des tables de style brut (UITableViewStylePlain) et non nulle pour les tables de groupe de sections UITableViewStyleGrouped).

Par conséquent, si vous utilisez un tableau de style simple, vous devrez alors allouer-init un nouveau UIViewayant la couleur d'arrière-plan souhaitée, puis l'assigner à selectedBackgroundView.

Alternativement, vous pouvez utiliser:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

si tout ce que vous vouliez était un fond gris lorsque la cellule est sélectionnée. J'espère que cela t'aides.


1
Cette propriété peut également être définie dans le story-board si vous préférez laisser la vue liée à la vue.
IIllIIll

1
Version Swift 3: cell.selectionStyle = .gray // Vous pouvez également utiliser .none, .blue ou .default
Sébastien REMY

6
Cette réponse est assez ancienne ... Quelque chose a-t-il été changé dans les nouvelles versions d'iOS? J'ai une table simple et ma sélection BackView n'est PAS nulle. Il est intéressant de changer le backgroundColor sur cette vue n'a aucun effet, à la place je dois le remplacer par un nouveau UIView avec mon backgroundColor souhaité pour le faire fonctionner.
ndreisg

Tu m'as juste sauvé de devenir complètement fou. Merci beaucoup!
mrwheet

656

Pas besoin de cellules personnalisées. Si vous souhaitez uniquement modifier la couleur sélectionnée de la cellule, vous pouvez le faire:

Objectif c:

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

Rapide:

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

47
Cela fonctionne, mais dans un UITableView groupé, les coins arrondis sont perdus.
David

1
@David Le cornerRadius = 7 fonctionne-t-il n'importe où dans la vue de table groupée? Et si la cellule est au milieu? Je n'ai pas le temps de tester ça.
Maciej Swic

2
car rapide est une petite erreur. La ligne correcte est cell.selectedBackgroundView = bgColorView
John Kakon

13
Sachez que pour que cela fonctionne, dans le Storyboard (ou fichier XIB), vous devez sélectionner une couleur d'arrière-plan sélectionnée autre que Aucune. Ceci est contraire à certaines réponses qui disent que vous devez d'abord le régler sur Aucun pour que cela fonctionne. Avec None, cela ne fonctionnera pas. Me rendait fou jusqu'à ce que je le comprenne. Merci.
kakubei

1
Comment feriez-vous cela lorsque vous utilisez également le storyboard?
John

42

La couleur d'arrière-plan de la sélection de cellule de vue de tableau peut être définie via le Storyboard dans Interface Builder:

vue du tableau couleur de sélection des cellules Aucune


1
Je pense que nous ne pouvons pas définir de couleur personnalisée à partir du storyboard. Besoin de le définir par programme.
pallavi

37

Si vous avez un tableau groupé avec une seule cellule par section, ajoutez simplement cette ligne supplémentaire au code: bgColorView.layer.cornerRadius = 10;

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

N'oubliez pas d'importer QuartzCore.


28

Swift 3: pour moi, cela a fonctionné lorsque vous le mettez dans la cellForRowAtIndexPath:méthode

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

6
Je pense que le meilleur endroit pour mettre cela est la awakeFromNib()méthode (en cas de cellule personnalisée).
LembergSun

22

Ce qui suit fonctionne pour moi dans iOS 8.

Je dois définir le style de sélection sur UITableViewCellSelectionStyleDefault pour que la couleur d'arrière-plan personnalisée fonctionne. Si vous utilisez un autre style, la couleur d'arrière-plan personnalisée sera ignorée. Il semble y avoir un changement de comportement, car les réponses précédentes doivent plutôt définir le style sur aucun.

Le code complet de la cellule comme suit:

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

Ce code fuit de la mémoire. Toute "alloc" ou création d'objet doit être dans le bloc if (cell == nil) {}. Ou la vue sera créée à chaque sortie de la cellule par iOS.
GeneCode

18

Créez une cellule personnalisée pour votre cellule de tableau et dans la cellule personnalisée class.m mettez le code ci-dessous, cela fonctionnera bien. Vous devez placer l'image couleur souhaitée dans 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
Je pense que cela pourrait être plus efficace en mémoire que de définir un selectedBackgroundView lors de l'initialisation de la cellule en créant uniquement la vue bg lorsqu'une cellule est sélectionnée.
dotslashlu

11

Extension 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
ajouter IBDesignable et IBInspectable
Michał Ziobro

1
@ MichałZiobro ajoutez juste @IBInspectablesur le var si vous voulez. @IBDesignablen'est pas utile pour cela.
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];
}

Nous devons définir la vue d'arrière-plan sélectionnée dans cette méthode.


8

Si vous souhaitez ajouter une couleur personnalisée en surbrillance à votre cellule (et votre cellule contient des boutons, des étiquettes, des images, etc.), j'ai suivi les étapes suivantes:

Par exemple, si vous souhaitez une couleur jaune sélectionnée:

1) Créez une vue qui convient à toutes les cellules avec une opacité de 20% (avec une couleur jaune) appelée par exemple backgroundselectedView

2) Dans le contrôleur de cellule, écrivez ceci:

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

Dans Swift 4, vous pouvez également définir la couleur d'arrière-plan de votre cellule de tableau globalement (prise à partir d' ici ):

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

6

Si vous utilisez un TableViewCell personnalisé, vous pouvez également remplacer awakeFromNib:

override func awakeFromNib() {
    super.awakeFromNib()

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

1
Bonne solution! Merci
Thomás Calmon

J'ai une vue de table simple avec pas plus de 10 cellules, cela fonctionne très bien jusqu'à présent.
code4latte

5

Une autre astuce pour la manière de Christian de montrer l'arrière-plan des coins arrondis pour la table groupée.

Si j'utilise cornerRadius = 10pour la cellule, il montre l'arrière-plan de sélection arrondi de quatre coins. Ce n'est pas la même chose avec l'interface utilisateur par défaut de la vue tabulaire.

Donc, je pense à un moyen facile de le résoudre avec cornerRadius . Comme vous pouvez le voir dans les codes ci-dessous, vérifiez l'emplacement de la cellule (haut, bas, milieu ou haut) et ajoutez un sous-calque supplémentaire pour masquer le coin supérieur ou le coin inférieur. Cela montre exactement le même aspect avec l'arrière-plan de sélection de la vue de tableau par défaut.

J'ai testé ce code avec iPad splitterview. Vous pouvez modifier la position du cadre de patchLayer selon vos besoins.

Veuillez me faire savoir s'il existe un moyen plus simple d'obtenir le même résultat.

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

Je tiens à noter que l'éditeur XIB vous propose les options standard suivantes:

Section: bleu / gris / aucun

(la colonne de droite avec des options, 4ème onglet, premier groupe "Cellule de vue de tableau", 4ème sous-groupe, le 1er des 3 éléments lit "Sélection")

Ce que vous voulez faire peut probablement être atteint en sélectionnant la bonne option standard.


vous avez raison. En raison de cela, vous pouvez simplement changer la couleur de sélection dans "cellForRowAtIndexPath" en ajoutant: UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier: @ "Cell"]; cell.selectedBackgroundView = [[UIView alloc] initWithFrame: CGRectZero]; cell.selectedBackgroundView.backgroundColor = [UIColor colorWithRed: (255/255) vert: (0/255) bleu: (0/255) alpha: 0,1];
user8675

MERCI! le chemin à parcourir
Fattie

3

Selon la couleur personnalisée pour une cellule sélectionnée UITableView, excellente solution selon la réponse de Maciej Swic

Juste pour ajouter à cela, vous déclarez la réponse de Swic dans la configuration cellulaire généralement sous:

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

Et pour un effet supplémentaire, au lieu des couleurs du système, vous pouvez utiliser des valeurs RVB pour un aspect de couleur personnalisé. Dans mon code, voici comment je l'ai réalisé:

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

}

Faites-moi savoir si cela fonctionne aussi pour vous. Vous pouvez jouer avec le cornerRadiusnuméro des effets sur les coins de la cellule sélectionnée.


3

J'ai une approche légèrement différente de tout le monde qui reflète la sélection au toucher plutôt qu'après avoir été sélectionnée. J'ai un UITableViewCell sous-classé. Il vous suffit de définir la couleur d'arrière-plan dans les événements tactiles, ce qui simule la sélection tactile, puis de définir la couleur d'arrière-plan dans la fonction setSelected. La définition de la couleur d'arrière-plan dans la fonction selSelected permet de désélectionner la cellule. Assurez-vous de transmettre l'événement tactile au super, sinon la cellule n'agira pas comme si elle était sélectionnée.

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

Pour ajouter l'arrière-plan de toutes les cellules (en utilisant la réponse 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

Pour remplacer UITableViewCell« s setSelectedfonctionne également.

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

pour ceux qui veulent juste se débarrasser de l'arrière-plan gris par défaut, mettez cette ligne de code dans votre func cellForRowAtIndexPath:

yourCell.selectionStyle = .None

1
merci beaucoup, c'est la bonne réponse pour moi pas pour les autres.
DeyaEldeen

Comment définir une couleur comme "vert" au lieu de n'en définir aucune ou bleu ou gris.
Satyam

2

pour Swift 3.0:

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

    cell.contentView.backgroundColor = UIColor.red
}

Bien, mais ne fonctionnera qu'après que l'utilisateur aura sélectionné quelque chose (la couleur de sélection par défaut restera au début)
Konstantin Salavatov

2

J'utilise l'approche ci-dessous et fonctionne bien pour moi,

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+:

Ajoutez les lignes suivantes dans votre cellule de tableau

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

Enfin, il devrait être comme ci-dessous

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

Voici les parties importantes du code nécessaires pour une table groupée. Lorsqu'une des cellules d'une section est sélectionnée, la première ligne change de couleur. Sans définir initialement le style de sélection de cellule sur aucun, il y a un double rechargement annonant lorsque l'utilisateur clique sur row0 où la cellule se transforme en bgColorView, puis s'estompe et recharge à nouveau bgColorView. Bonne chance et faites-moi savoir s'il existe un moyen plus simple de le faire.

- (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 cas de classe de cellule personnalisée. Remplacez simplement:

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

C'est facile lorsque le style de vue de table est simple, mais en style de groupe, c'est un peu difficile, je le résous par:

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;

a noté le kGroupTableViewCellWidth, je le définis comme 300, c'est la largeur de la largeur de cellule de la vue de table de groupe dans l'iPhone


0
[cell setSelectionStyle:UITableViewCellSelectionStyleGray];

Assurez-vous que vous avez utilisé la ligne ci-dessus pour utiliser l'effet de sélection


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
}

Veuillez ajouter une explication de votre réponse pour la rendre lisible pour tous les futurs lecteurs
techspider

0

J'utilise iOS 9.3 et la définition de la couleur via le Storyboard ou le paramètre cell.selectionStylen'a pas fonctionné pour moi, mais le code ci-dessous a fonctionné:

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;

J'ai trouvé cette solution ici .


0

Essayez de suivre le code.

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

// Version 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

Pour changer la couleur d'arrière-plan de la sélection en n'importe quelle couleur, utilisez l' extension Swift

Créez l'extension UITableView Cell comme ci-dessous

extension UITableViewCell{

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

}

Appelez ensuite removeCellSelectionColour () avec une instance de cellule.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.