Comment puis-je changer la couleur de l'en-tête d'une section dans UITableView ?
EDIT : Le site réponse fournie par DJ-S doit être envisagé pour iOS 6 et plus. La réponse acceptée n'est plus d'actualité.
Comment puis-je changer la couleur de l'en-tête d'une section dans UITableView ?
EDIT : Le site réponse fournie par DJ-S doit être envisagé pour iOS 6 et plus. La réponse acceptée n'est plus d'actualité.
Il s'agit d'une vieille question, mais je pense que la réponse doit être mise à jour.
Cette méthode n'implique pas de définir et de créer votre propre vue personnalisée. Dans les versions iOS 6 et ultérieures, vous pouvez facilement modifier la couleur de l'arrière-plan et du texte en définissant l'attribut
-(void)tableView:(UITableView *)tableView
willDisplayHeaderView:(UIView *)view
forSection:(NSInteger)section
méthode de délégation de section
Par exemple :
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section
{
// Background color
view.tintColor = [UIColor blackColor];
// Text Color
UITableViewHeaderFooterView *header = (UITableViewHeaderFooterView *)view;
[header.textLabel setTextColor:[UIColor whiteColor]];
// Another way to set the background color
// Note: does not preserve gradient effect of original header
// header.contentView.backgroundColor = [UIColor blackColor];
}
Tiré de mon post ici : https://happyteamlabs.com/blog/ios-how-to-customize-table-view-header-and-footer-colors/
Swift 3 / 4
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int){
view.tintColor = UIColor.red
let header = view as! UITableViewHeaderFooterView
header.textLabel?.textColor = UIColor.white
}
Je ne savais même pas que cela avait été ajouté au SDK. C'est génial ! Absolument la bonne réponse.
OP - Veuillez mettre à jour la réponse acceptée à celle-ci. Beaucoup plus propre que les anciennes approches.
Ça n'a pas l'air de fonctionner pour moi. La couleur du texte fonctionne mais pas la teinte de l'arrière-plan de l'en-tête. Je suis sous iOS 7.0.4.
Espérons que cette méthode de l UITableViewDelegate
vous permettra de commencer :
Objective-C :
- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 30)] autorelease];
if (section == integerRepresentingYourSectionOfInterest)
[headerView setBackgroundColor:[UIColor redColor]];
else
[headerView setBackgroundColor:[UIColor clearColor]];
return headerView;
}
Swift :
func tableView(_ tableView: UITableView!, viewForHeaderInSection section: Int) -> UIView!
{
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30))
if (section == integerRepresentingYourSectionOfInterest) {
headerView.backgroundColor = UIColor.redColor()
} else {
headerView.backgroundColor = UIColor.clearColor()
}
return headerView
}
Mis à jour en 2017 :
Swift 3 :
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView?
{
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.size.width, height: 30))
if (section == integerRepresentingYourSectionOfInterest) {
headerView.backgroundColor = UIColor.red
} else {
headerView.backgroundColor = UIColor.clear
}
return headerView
}
Remplacer [UIColor redColor]
avec n'importe quelle UIColor
vous aimeriez. Vous pouvez également ajuster les dimensions de headerView
.
Il peut également être utile d'ajuster la taille de l'en-tête de la section en utilisant self.tableView.sectionHeaderHeight. Sinon, vous risquez d'avoir du mal à voir le texte que vous affichez pour le titre de la section.
Fonctionne bien avec [UIColor xxxColor]
Cependant, lorsque j'essaie d'obtenir une couleur personnalisée, comme celles que je peux obtenir dans Photoshop (donc en utilisant l'option UIColor red:green:blue:alpha:
il est juste blanc. Est-ce que je fais quelque chose de mal ?
Voici comment modifier la couleur du texte.
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(10, 3, tableView.bounds.size.width - 10, 18)] autorelease];
label.text = @"Section Header Text Here";
label.textColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.75];
label.backgroundColor = [UIColor clearColor];
[headerView addSubview:label];
Merci DocteurG - C'était utile. BTW - pour conserver l'étiquette existante fournie par le dataSource, j'ai modifié la 2ème ligne comme suit : label.text = [tableView.dataSource tableView:tableView titleForHeaderInSection:section] ; C'est peut-être mal vu, mais ça a marché pour moi. Peut-être que cela peut aider quelqu'un d'autre.
@JJ Cette forme est en fait correcte, puisque vous appelez la même méthode que celle que vous utiliseriez initialement pour définir l'en-tête de section du tableau.
J'ai supprimé l'autorelease et l'ai remplacé par un release explicite. Les méthodes de formatage des UITableView sont appelées de très nombreuses fois. Évitez d'utiliser autorelease si possible.
Hm... cela ne fonctionne pas pour moi. J'ai essayé le simulateur iOS 6 et l'appareil iOS 7. Avez-vous testé de cette façon ? Où dois-je le placer ?
Cela peut être fait dans la méthode application:didFinishLaunchingWithOptions : du délégué de l'application.
Ma faute : j'ai essayé d'utiliser cette méthode avec UITableViewStyleGrouped BTW : pour changer la couleur du texte, il faut utiliser cette méthode. stackoverflow.com/a/20778406/751932
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.
4 votes
J'apprécie vraiment l'édition RE des nouvelles versions iOS.