2012-10-11 3 views
5

J'essaie de travailler de manière simple. Au moins, cela semble simple. Ok, ce que je voudrais faire est de pousser une vue (avec le contrôleur de vue de poussée) d'une vue qui a été poussée avec le contrôleur de vue modale. View1 - (pousser en utilisant le contrôleur de vue modale) -> View2 - (pousser en utilisant le contrôleur de vue push) - View3. Rigueur maintenant, je fais des tests donc j'utilise un bouton pour commencer l'action. Voici le code que j'utilise pour pousser de View2 pour voir 3:Poussez le contrôleur de vue dans la vue du contrôleur de vue modale

//view2.h 
UIToolbar *bar; 
UIBarButtonItem *button; 
UIToolbar *toolbar; 

} 

- (IBAction)demissModal:(id)sender; 
- (IBAction)goView3:(id)sender; 

@end 

//view2.m 
- (IBAction)goView3:(id)sender{ 

View3 *view_3 = [[View3 alloc] initWithNibName:@"View3" bundle:nil]; 
[self.navigationController pushViewController:view_3 animated:YES]; 

} 

C'est le même code que j'utilise pour pousser View1 à View2, et cela fonctionne. Mais lorsque vous passez de View2 à View3, cela ne fonctionne pas. Une idée de pourquoi cela arrive? Merci!

+0

Vous devez appuyer sur le contrôleur de vue sur le contrôleur actif. Voir si cela fonctionne [self pushViewController: view_3 animé: YES]; –

Répondre

11

View Les contrôleurs ne sont pas réellement des contrôleurs de vue «modale» ou «push». Modal ou Push décrivent une transition entre les contrôleurs de vue (appelés segues si vous utilisez des storyboards).

Ce que je pense que vous demandez est comment modally présenter un contrôleur de vue, puis pousser un autre contrôleur. L'astuce est lorsque vous présentez le contrôleur de vue n ° 1 de manière modale, pour présenter réellement un contrôleur de navigation avec son contrôleur de vue racine défini comme contrôleur de vue n ° 1.

MyViewController *myViewController = [MyViewController alloc] init]; 
UINavigationController *navController = [UINavigationController alloc] initWithRootViewController:myViewController]; 

// Presuming a view controller is asking for the modal transition in the first place. 
[self presentViewController:navController animated:YES completion:nil]; 
// Now in myViewController, call [self.navigationController pushViewController:secondViewController animated:YES]; 

C'est ce qu'il ressemble à l'aide storyboards: enter image description here

+0

Ok, cela fonctionne mais pas très bien. Lorsque la deuxième vue est affichée avec une transition modale, j'ai vu le bouton qui doit être pressé pour passer à View3. Si j'appuie sur le bouton une fois, il affiche la même vue avec la transition modale, et si j'appuie sur une autre vue, elle montre la même chose avec une transition étrange. Je ne sais pas pourquoi ça arrive. – joan2404

+0

Quel code est en cours d'exécution lorsque vous appuyez sur le bouton qui devrait provoquer le push? Ça devrait être quelque chose comme '[self.navigationController pushViewController: <# UIViewController #> animé: YES]; ' – MaxGabriel

+0

Voici le code que j'utilise: View * myViewController = [[View2 alloc] init]; View3 * descripcio = [[View3 alloc] init]; UINavigationController * navController = [[UINavigationController alloc] initWithRootViewController: View2]; [self presentViewController: navController animé: YES achèvement: néant]; [self.navigationController pushViewController: View3 animé: OUI]; – joan2404

0

Essayez ceci:

[self.navigationController pushViewController:view_3 animated:YES]; 
0

Tout d'abord, je ne sais pas où cette gegant_se vient. Deuxièmement, si vous expulsez view2 de view1 de la même manière que view3 de view2, vous n'utilisez pas de modal.

Chaque fois que vous utilisez un contrôleur de navigation pour pousser un contrôleur de vue, ce contrôleur de vue qui vient d'être poussé fait référence au contrôleur de navigation, via la propriété navigationController. Essayez ceci:

[self.navigationController pushViewController:view_3 animated:YES]; 
+0

Désolé pour ça gegant_se. C'était juste un test et j'ai oublié de le changer. – joan2404

0

essayer ce AlarmList code est le nom de la vue.

AlarmListScreen * loscr = [[AlarmListScreen alloc] initNithNibName: nil bundle: nil];

[self.navigationController pushViewController: loscr animé: OUI];

[loscr release]; 
Questions connexes