28 votes

Comment personnaliser l'affichage de la section TableView - iPhone

Je sais comment personnaliser la tableViewCell.

J'ai vu de nombreuses applications personnaliser la cellule du tableView.

De même, je veux personnaliser l'en-tête de la section TableView

"Supposons que le nom d'une section soit dans une police différente, qu'elle ait des images d'arrière-plan différentes etc."

Comment est-ce possible ?

Dans quelle méthode dois-je implémenter le code ?

59voto

h4xxr Points 7470

Au lieu d'utiliser la méthode normale

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

Vous voulez mettre en œuvre celui-ci :

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

Comme vous pouvez le voir, la seconde renvoie un UIView au lieu d'une simple chaîne de caractères pour le texte. Vous pouvez donc personnaliser votre propre vue (avec des étiquettes, etc.) et la renvoyer.

Voici un exemple de la façon dont vous pourriez le faire (à mettre en œuvre dans la méthode ci-dessus) :

// create the parent view that will hold header Label
UIView* customView = [[[UIView alloc] initWithFrame:CGRectMake(10,0,300,60)] autorelease];

// create image object
UIImage *myImage = [UIImage imageNamed:@"someimage.png"];;

// create the label objects
UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.frame = CGRectMake(70,18,200,20);
headerLabel.text =  @"Some Text";
headerLabel.textColor = [UIColor redColor];

UILabel *detailLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
detailLabel.backgroundColor = [UIColor clearColor];
detailLabel.textColor = [UIColor darkGrayColor];
detailLabel.text = @"Some detail text";
detailLabel.font = [UIFont systemFontOfSize:12];
detailLabel.frame = CGRectMake(70,33,230,25);

// create the imageView with the image in it
UIImageView *imageView = [[[UIImageView alloc] initWithImage:myImage] autorelease];
imageView.frame = CGRectMake(10,10,50,50);

[customView addSubview:imageView];
[customView addSubview:headerLabel];
[customView addSubview:detailLabel];

return customView;

J'espère que cela vous aidera.

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