2009-08-16 7 views
1

D'abord un peu d'informations d'arrière-plan:Non défilement tableViewHeader

J'ai UIViewController qui contient un UITableView. Dans la méthode loadView (après l'initialisation de la table), je définis la vue UIViewControllers sur la vue table avec: self.view = tableView; Ce que je veux, c'est une vue en haut de l'écran (avant UITableView), qui ne défile pas avec le reste de la vue de la table quand elle est défilée. J'ai essayé d'ajouter mon UIView à tableViewHeader de la table, qui affiche correctement mais défile avec le reste de la table.

Y at-il une solution facile pour cela? De toute façon, des conseils pour une solution est grandement appréciée.

EDIT:

Venez y penser, ce que je veux est quelque chose comme l'application d'actions où la partie inférieure est fixe et le reste de l'écran est un UITableView. La seule différence est que je veux la partie fixe en haut de l'écran.

Répondre

0

Y a-t-il une raison pour laquelle vous définissez la vue du UIViewController sur celle de UITableView? Pourquoi ne pas gérer UITableView en tant que sous-vue? Cela vous permettrait d'ajouter tout ce que vous voulez au-dessus de la vue UITableView -another, espace vide avec la vue de l'UIViewController comme arrière-plan, etc

+0

Que suggérez-vous? J'ai essayé d'ajouter l'UIView et l'UITableView au UIViewController en disant: [self.view addSubview: headerView]; et [self.view addSubview: tableView]; Chaque vue a été initialisée avec un cadre approprié. Lorsque je fais cela le programme se bloque et le débogueur lance l'affichage: Chargement 95186 cadres de pile ... – Erik

+0

Hmm, trouvé l'erreur. J'ai essayé votre approche plus tôt et, comme je l'ai dit, tout s'est brisé. C'était parce que j'avais oublié de mettre [super loadView]; dans ma méthode loadView. Donc, je vais vous donner la bonne réponse à ce sujet, parce que votre approche est ce que je vais finir par utiliser à la fin. – Erik

1

Comme kmit l'a déjà souligné, vous pouvez facilement ajouter plus d'une sous-vue à ta vue. Donc, ne définissez pas la vue de la table directement comme self.view, mais créez plutôt un blanc UIView (en tant que conteneur) et ajoutez la vue de la table ainsi que l'affichage de l'en-tête en tant que sous-vues à cette vue. Vous pouvez contrôler les étendues des vues via leurs attributs de cadre. Un exemple simple:

- (void)loadView { 
    UIView* view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)]; 
    [view setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 

    // header view 
    HeaderView* headerView = [[HeaderView alloc] initWithFrame:CGRectMake(0, 0, 320, 182)]; 
    self.headerView = headerView; // in case you need the reference later on 
    [view addSubview:headerView]; 
    [headerView release]; 

    // table view 
    UITableView* tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 182, 320, 186) style:UITableViewStylePlain]; 
    [tableView setAutoresizingMask:UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth]; 
    tableView.delegate = self; 
    tableView.dataSource = self; 
    [view addSubview:tableView]; 
    self.tableView = tableView; 
    [tableView release]; 

    self.view = view; 
    [view release]; 
} 

Comme alternative à la création du contenant UIView manuellement, vous pouvez appeler [super loadView] au début de votre mise en œuvre loadView.