2009-06-28 11 views
1

Mon application comprend 3 vues. J'ai défini 3 méthodes d'assistance dans le AppDelegate pour passer entre chaque vue (de sorte que chaque vue peut appeler l'autre), qui se présentent comme suit:Affichage non dessiné correctement lors du changement de vue

-(IBAction)goToView1 { 
    if (view1 == nil) 
    { 
     View1 *thisView = [[View1 alloc] initWithNibName:@"View1" bundle:nil]; 
     view1 = thisView; 
    } 

    for (UIView *view in window.subviews) 
     [view removeFromSuperview]; 

    [window addSubview:view1.view]; 
} 

Si l'utilisateur souhaite passer à un autre point de vue, j'attache un bouton à un IBAction défini dans le contrôleur de la vue:

-(IBAction)goToOtherView:(id)sender { 
    ViewSwitcherAppDelegate *root = [[UIApplication sharedApplication] delegate]; 
    [root goToView1]; 
} 

tout cela fonctionne très bien pour changer de vue, mais quand la vue est dessiné, il est affiche incorrectement, comme il ignore la barre d'état:

alt text http://lh4.ggpht.com/_nbwj7pSrW10/SkcGEZ3XH0I/AAAAAAAABMs/nAkkja27e8I/s576/ViewSwitchingProblem.png

Qu'est-ce que je fais mal? Cela fonctionne bien lorsque l'application démarre, donc je pense qu'il y a quelque chose qui ne va pas dans la façon dont j'ajoute la sous-vue à la fenêtre.

Merci d'avance!

+0

Définissez-vous la propriété frame de la vue? Si oui, pouvez-vous nous montrer le code? – diederikh

+0

Pas que je sache. Les vues ont été créées en utilisant les valeurs par défaut. Voici un exemple de projet qui présente le même comportement (en utilisant SDK 3.0): http://files.getdropbox.com/u/361159/ViewSwitcher.zip –

Répondre

1

Étant donné que vous n'utilisez pas le contrôleur de la vue pour l'afficher, vous devez ajuster vous-même le cadre de la vue. Vous devez définir son origine sur {0, 20} pour prendre en compte l'espace de la barre d'état.

Mais vous feriez mieux d'utiliser le UIViewController et de le pousser sur le UINavigationController. See the docs.

+0

Merci pour cela - j'ai pris vos conseils et la conception à remaniée avec utilisez un UINavigationController à la place. –

Questions connexes