web-dev-qa-db-fra.com

Pourquoi la couleur d'arrière-plan UITableViewCell ne fonctionne-t-elle pas (définie dans le générateur d'interface)?

Pourquoi la couleur d'arrière-plan UITableViewCell ne fonctionne-t-elle pas (définie dans le générateur d'interface)?

D'après certaines recherches, le code de suivi défini dans votre sous-classe personnalisée de UITableViewController fonctionne (voir ci-dessous):

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor redColor];
}

Mais j'aimerais quand même simplement comprendre pourquoi le générateur d'interface a un paramètre de couleur d'arrière-plan pour la TableViewCell, qui ne semble effectivement pas fonctionner?

55
Greg

(essaye ça)

La conception de l'IB d'Apple est générique et s'applique à de nombreux types de composants. Elle s'adresse également à un public extrêmement technique (développeurs). Par conséquent, il n'a pas été conçu (en tant qu'application) pour personnaliser entièrement l'interface correctement pour chaque type de composant/situation. Donc, dans ce cas, la possibilité de définir apparemment la couleur de fond est quelque peu trompeuse.

0
Greg

Il est un peu tard, mais je viens de rencontrer ce problème ... Définir la couleur d'arrière-plan de la variable contentView convient parfaitement:

cell.contentView.backgroundColor = [UIColor redColor];
69
chris

Ce qui a fonctionné pour moi, c’est de créer mon propre objet UIView à définir comme vue d’arrière-plan de UITableViewCell. Dans le cellForRowAtIndexPath:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UIView* bgview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
bgview.opaque = YES;
bgview.backgroundColor = [UIColor orangeColor];
[cell setBackgroundView:bgview];
16
Shiprack

Essayer de définir la couleur d'arrière-plan de UITableViewCell lui-même n'est pas la bonne façon de procéder. Une cellule de tableau contient une collection de cinq vues utiles auxquelles vous pouvez accéder, dont l'une est backgroundView.

Lecture recommandée:

http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

et alors:

http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html

11
occulus

Vous devez toujours fournir les modifications pour les cellules dans tableView:willDisplayCell:forRowAtIndexPath: au lieu de la méthode tableView:cellForRowAtIndexPath:, comme indiqué dans la documentation Apple.

Cela marche !!

7
Subbu
[cell.textLabel setBackgroundColor:[UIColor clearColor]];
[cell.contentView setBackgroundColor:[UIColor redColor]];
3
Warewolf

Avant de définir une couleur de cellule, assurez-vous que votre backgroundView est nulle

cell.backgroundView = nil;
cell.backgroundColor = [UIColor redColor];
2
felipecamposclarke

Ceci est simple et fonctionne: dans le générateur d'interface, ajoutez un objet vue à la classe UITableViewCell de mêmes dimensions et placez vos contrôles à l'intérieur de cette vue. Ensuite, vous obtenez la couleur de fond souhaitée.

Edit: voici une raison pour accepter, cela m’a frappé: examinez attentivement ce que vous obtenez lorsque vous double-cliquez sur une UITableViewCell dans IB que vous placez dans votre nib, pour commencer à y ajouter des éléments: vous ne recevez pas Vue rectangle simple, vous obtenez un rectangle ovale qui dit très clairement: Vue du contenu. Par conséquent, tout ce que vous pouvez faire est de définir la vue de contenu de UITableViewCell dans IB, et la définition de la propriété de couleur d'arrière-plan de la vue de contenu ne produit pas le changement de couleur dans la table. Comme les docs le disent, UITableViewCells sont des bêtes complexes avec beaucoup de parties avec beaucoup de choses en coulisses en termes de UITableView l'ajuster et le bidouiller. 

1
Bogatyr

Vous pouvez le faire partiellement dans Interface Builder (probablement ajouté à Xcode récemment):

  • Développez la cellule dans la structure du document du Storyboard et sélectionnez "Affichage du contenu".
  • Définition de la couleur d'arrière-plan de la vue du contenu dans l'inspecteur d'attributs
  • Sélectionnez chaque élément de contenu dans la cellule et définissez leurs couleurs d'arrière-planto ClearColor

Vous ne trouvez toujours pas un moyen de définir l'arrière-plan de l'accessoire.

0
Symmetric

Essayez ceci cela fonctionne pour moi:

- (void)tableView:(UITableView *)tableView1 willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    [cell setBackgroundColor:[UIColor clearColor]];
    tableView1.backgroundColor = [UIColor colorWithPatternImage: [UIImage imageNamed: @"Cream.jpg"]];
}
0
user4919266

Y pas, utilisez setBackgroundColor 

self.table.separatorColor=[UIColor whiteColor];
[table setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
0
Splendid
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
UIView *view = [[UIView alloc] init];
[view setBackgroundColor:[UIColor redColor]];
[cell setSelectedBackgroundView:view];}

Nous devons changer la couleur dans cette méthode.

0
Hemanshu Liya

Cela fonctionne parfaitement, si vous choisissez la table et que vous définissez l’arrière-plan sur, par exemple, le rouge, tout le tableau sera rouge. 

espérons que cela a aidé 

0
Csabi

J'ai aussi eu ce problème… .. Dans IB, vous avez la possibilité de changer la couleur de fond de la cellule lorsque vous choisissez une cellule. Ce n'est pas correct. Vous devriez aller au contour du document à gauche du storyboard et choisir l'affichage du contenu à l'intérieur de la cellule. Changer le fond de la vue de contenu. Vous devriez maintenant obtenir la couleur de cellule correcte.

0
Odd-Arne