38 votes

iPhone UITableView avec une zone d'en-tête

J'ai une vue qui a été créée avec tous les éléments par défaut UITableView , mais je dois maintenant ajouter une zone d'en-tête au-dessus de la zone UITableView (donc UITableView défilera normalement, mais le haut de l'écran (100 pixels ou plus) aura un contenu d'en-tête statique). Je ne vois pas où je peux redimensionner les UITableView dans IB, et je ne sais pas comment faire.

Est-ce que quelqu'un sait?

46voto

Oscar Gomez Points 12966

Pourquoi n'utilisez-vous pas l'en-tête fourni par UITableView?. Comme suit:

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

{
     return @"My Title";
}
 

De plus, vous pouvez redimensionner votre vue tableau dans IB en faisant glisser les bordures.

16voto

lithium Points 785

Lorsque vous ajoutez un UIView ou un de ses sous-classes sur l' UITableView à l'aide de l'IB (il suffit de glisser une UIView et déposez-la sur la partie SUPÉRIEURE de l' UITableView de la vôtre), il ajoute automatiquement qu' UIView composant et en fait le "tableHeader" composant.

Chaque UITableView a un tableHeader et un tableFooter de la composante de réservé...

De cette façon, le nouveau point de vue, une partie de la UITable, et faites défiler avec ou apparaître/disparaître ou tout ce que vous faites à la table. Vous pouvez modifier sa propriété hidden si vous avez besoin d'un comportement conditionnel.

D'autre part, si vous voulez l'en-tête de la vue de rester sur place, comme la table des parchemins, alors il est mieux pour rendre le tableau plus petit et mettre l'en-tête au-dessus d'elle comme suggéré dans d'autres réponses...

6voto

Steve Potter Points 907

J'ai enfin résolu ce problème de la bonne façon, sans modifier la classe de base. La réponse d'ajouter le point de vue de la mère nav contrôleur est bien, mais les transitions de l'air horrible.

La solution est assez simple en fait. L'astuce est de créer des setter et getter pour soi.tableView de la propriété. Puis, dans loadView, vous remplacez la vue avec une nouvelle UIView et ajouter la tableView à elle. Ensuite, vous êtes libre d'ajouter des sous-vues autour de la tableView. Voici comment on fait:

En-tête:

@interface CustomTableViewController : UITableViewController
{
    UITableView *tableView;
} 

Dans .m:

- (UITableView*)tableView
{
    return tableView;
}

- (void)setTableView:(UITableView *)newTableView
{
    if ( newTableView != tableView )
    {
        [tableView release];
        tableView = [newTableView retain];
    }        
}

- (void)loadView {
    [super loadView];
    //save current tableview, then replace view with a regular uiview
    self.tableView = (UITableView*)self.view;
    self.view = [[UIView alloc] initWithFrame:self.tableView.frame];
    [self.view addSubview:self.tableView];    

    //code below adds some custom stuff above the table
    UIView *customHeader = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 20)];
    customHeader.backgroundColor = [UIColor redColor];
    [self.view addSubview:customHeader];
    [customHeader release];

    self.tableView.frame = CGRectMake(0, customHeader.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - customHeader.frame.size.height);
}

- (void)viewDidUnload
{
    self.tableView = nil;
    [super viewDidUnload];
}

Profitez-en!

3voto

Mihir Mathuria Points 3060

Vous devrez incorporer les UITableView dans une UIView avec une autre vue (à laquelle vous vous référez en tant que section d'en-tête).

Ainsi, les UIView auront 2 sous-vues. La vue en-tête suivie par la vue tableau.

  • UIView (parent)
    • UIView (en-tête)
    • UITableView (tableau)

J'espère que cela t'aides.

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