J'utilise ce code pour ajouter un pied de page à la table. Il comporte 20 sections et chaque section quelques lignes. Il existe une méthode titleForHeaderInSection et sectionForSectionIndexTitle.
CGRect footerRect = CGRectMake(0, 0, 320, 40);
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
self.theTable.tableFooterView = tableFooter;
[tableFooter release];
Qu'est-ce que je fais mal?
merci,
RL
Vous devez implémenter la méthode UITableViewDelegate
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
et renvoyez la vue souhaitée (par exemple un UILabel avec le texte que vous souhaitez dans le pied de page) pour la section appropriée du tableau.
Je vois précisément dans mon code que
self.theTable.tableFooterView = tableFooter;
travaux et
[self.theTable.tableFooterView addSubview:tableFooter];
ne marche pas. Alors, restez sur l'ancien et cherchez ailleurs le bug possible. HTH
Je l'ai utilisé et cela a fonctionné parfaitement :)
UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)];
[footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"ProductCellBackground.png"]]];
self.tableView.tableFooterView = footerView;
[self.tableView setSeparatorStyle:(UITableViewCellSeparatorStyleNone)];
[self.tableView setContentInset:(UIEdgeInsetsMake(0, 0, -500, 0))];
Au début, j'essayais juste la méthode:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
mais après avoir utilisé ceci avec:
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
le problème a été résolu. Exemple de programme
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 30.0f;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *sampleView = [[UIView alloc] init];
sampleView.frame = CGRectMake(SCREEN_WIDTH/2, 5, 60, 4);
sampleView.backgroundColor = [UIColor blackColor];
return sampleView;
}
et inclure le protocole UITableViewDelegate.
@interface TestViewController : UIViewController <UITableViewDelegate>
Je sais que c'est une question assez ancienne mais je viens de rencontrer le même problème. Je ne sais pas exactement pourquoi, mais il semble que tableFooterView ne puisse être qu'une instance d'UIView (pas "un peu" mais "est membre") ... Donc, dans mon cas, j'ai créé un nouvel objet UIView (par exemple, wrapperView) et ajoutez-y ma sous-vue personnalisée ... Dans votre cas, modifiez votre code à partir de:
CGRect footerRect = CGRectMake(0, 0, 320, 40);
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
self.theTable.tableFooterView = tableFooter;
[tableFooter release];
à:
CGRect footerRect = CGRectMake(0, 0, 320, 40);
UIView *wrapperView = [[UIView alloc] initWithFrame:footerRect];
UILabel *tableFooter = [[UILabel alloc] initWithFrame:footerRect];
tableFooter.textColor = [UIColor blueColor];
tableFooter.backgroundColor = [self.theTable backgroundColor];
tableFooter.opaque = YES;
tableFooter.font = [UIFont boldSystemFontOfSize:15];
tableFooter.text = @"test";
[wrapperView addSubview:tableFooter];
self.theTable.tableFooterView = wrapperView;
[wrapperView release];
[tableFooter release];
J'espère que ça aide. Ça marche pour moi.
Swift 2.1.1 ci-dessous fonctionne:
func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let v = UIView()
v.backgroundColor = UIColor.RGB(53, 60, 62)
return v
}
func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return 80
}
Si vous utilisez self.theTable.tableFooterView = tableFooter
, il y a un espace entre la dernière ligne et tableFooterView
.
Ces échantillons fonctionnent bien. Vous pouvez vérifier la section, puis renvoyer une hauteur à afficher ou masquer la section. N'oubliez pas d'étendre votre contrôleur de vue à partir de UITableViewDelegate
.
Objectif c
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
if (section == 0)
{
// to hide footer for section 0
return 0.0;
}
else
{
// show footer for every section except section 0
return HEIGHT_YOU_WANT;
}
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *footerView = [[UIView alloc] init];
footerView.backgroundColor = [UIColor blackColor];
return footerView;
}
Rapide
func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let footerView = UIView()
footerView.backgroundColor = UIColor.black
return footerView
}
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
if section == 0 {
// to hide footer for section 0
return 0.0
} else {
// show footer for every section except section 0
return HEIGHT_YOU_WANT
}
}
[self.tableView setTableFooterView:footerView];
J'ai eu le même problème mais j'ai remplacé la ligne suivante dans mon en-tête:
@interface MyController : UIViewTableViewController <UITableViewDelegate, UITableViewDataSource>
avec cette ligne et cela fonctionne comme prévu:
@interface RequestViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
Notez le UIViewController . Bonne chance :)
au lieu de
self.theTable.tableFooterView = tableFooter;
essayer
[self.theTable.tableFooterView addSubview:tableFooter];
Si vous ne préférez pas l'effet de fond collant, je le mettrais dans viewDidLoad()
https://stackoverflow.com/a/38176479/4127670