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!