web-dev-qa-db-fra.com

Comment ajouter un pied de page à UITableView?

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

52
Rui Lopes

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.

35
Erik

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

35
kris

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))];
18
pawelini1

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>
6
Subham93

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.

6
zioolek

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.

4
William Hu

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
    }
}
3
abdullahselek
[self.tableView setTableFooterView:footerView];
2
user3693546

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 :)

1
PowerAktar

au lieu de 

self.theTable.tableFooterView = tableFooter;

essayer 

[self.theTable.tableFooterView addSubview:tableFooter];
1
amattn

Si vous ne préférez pas l'effet de fond collant, je le mettrais dans viewDidLoad()https://stackoverflow.com/a/38176479/4127670

0
spaceMonkey