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?
(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.
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];
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];
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
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 !!
[cell.textLabel setBackgroundColor:[UIColor clearColor]];
[cell.contentView setBackgroundColor:[UIColor redColor]];
Avant de définir une couleur de cellule, assurez-vous que votre backgroundView
est nulle
cell.backgroundView = nil;
cell.backgroundColor = [UIColor redColor];
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.
Vous pouvez le faire partiellement dans Interface Builder (probablement ajouté à Xcode récemment):
Vous ne trouvez toujours pas un moyen de définir l'arrière-plan de l'accessoire.
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"]];
}
Y pas, utilisez setBackgroundColor
self.table.separatorColor=[UIColor whiteColor];
[table setBackgroundColor:[UIColor colorWithRed:.8 green:.8 blue:1 alpha:1]];
-(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.
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é
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.