331 votes

UITableView Cell selected Color?

J'ai créé un UITableViewCell . La vue de table montre des données bien. Ce que je suis coincé est quand l'utilisateur touche la cellule de tableView, alors je veux montrer la couleur d'arrière-plan de la cellule autre que les valeurs par défaut [couleur bleue] pour mettre en évidence la sélection de la cellule. J'utilise ce code mais rien ne se passe:

 cell.selectedBackgroundView.backgroundColor=[UIColor blackColor];
 

678voto

Maciej Swic Points 2010

Pas besoin de cellules personnalisées. Si vous voulez seulement changer 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:

 var bgColorView = UIView()
bgColorView.backgroundColor = UIColor.redColor()
cell.selectedBackgroundView = bgColorView
 

Edit: Mise à jour pour ARC

380voto

Andrew Little Points 3507

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

La valeur par défaut est nulle pour les cellules de la plaine-des tables de styles (UITableViewStylePlain) et non-nul pour la section-groupe de tables UITableViewStyleGrouped).

Par conséquent, si vous êtes en utilisant un simple style de la table, alors vous aurez besoin d'alloc-initialisation d'un nouveau UIView avoir votre choix de la couleur de fond, puis l'assigner en selectedBackgroundView.

Alternativement, vous pouvez utiliser:

cell.selectionStyle = UITableViewCellSelectionStyleGray;

si tout ce que vous voulais, c'était un fond gris quand la cellule est sélectionnée. Espérons que cette aide.

37voto

Christian Fritz Points 275

Si vous avez une table groupée 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]; 
 

Ne pas oublier d'importer QuartzCore.

18voto

rajesh Points 383

Créez une cellule personnalisée pour votre cellule de tableau et dans la cellule personnalisée class.m. Placez le code ci-dessous, cela fonctionnera correctement. Vous devez placer l'image couleur souhaitée dans selectionBackground UIImage.

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

5voto

Wonil Points 1499

Une astuce de plus pour les Chrétiens du moyen de montrer à coins arrondis de fond pour groupés table.

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

Donc, je pense que sur la façon facile de le résoudre avec cornerRadius. Comme vous pouvez le voir ci-dessous les codes, vérifier sur de la cellule à l'endroit (en haut, en bas, au milieu ou à topbottom) et d'ajouter un sous-couches pour cacher coin en haut ou en bas du coin. Cela montre juste exactement le même look avec par défaut la vue de la table de sélection de l'arrière-plan.

J'ai testé ce code avec l'iPad répartiteur de vue. Vous pouvez modifier patchLayer de l'image de la position que vous avez besoin.

S'il vous plaît laissez-moi savoir si il y a plus de moyen plus simple pour atteindre 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];
                }
            }
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X