2012-10-11 5 views
5

Ich versuche, eine einfache Operation zu arbeiten. Zumindest scheint es einfach zu sein. Ok, was ich tun möchte, ist eine Ansicht (mit Push-View-Controller) aus einer Ansicht zu schieben, die mit Modal-View-Controller geschoben wurde.Push-View-Controller in modale Ansicht Controller-Ansicht

View1 - (Drücken Sie mit Modal View-Controller) -> View2 - (Push Push-Controller) - View3.

Rigth jetzt mache ich Tests, also benutze ich eine Taste, um die Aktion zu starten. Hier ist der Code, den ich von View2 drücken verwenden, um 3 anzuzeigen:

//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]; 

} 

Dies ist der gleiche Code verwende ich Ansicht1 zu View2 schieben, und es funktioniert. Aber wenn View2 zu View3 geschoben wird, funktioniert es nicht. Irgendeine Idee warum passiert das? Vielen Dank!

+0

Sie müssen den View-Controller auf dem aktiven Controller drücken. Sehen Sie, ob das funktioniert [self pushViewController: view_3 animated: YES]; –

Antwort

11

Ansicht Controller sind nicht wirklich "modal" oder "Push" View-Controller. Modal oder Push beschreiben einen Übergang zwischen View-Controllern (bei Storyboards als "segues" bezeichnet).

Was ich denke, dass Sie fragen, ist wie man einen View-Controller modal präsentiert, und dann einen anderen Controller drücken. Der Trick ist, wenn Sie den View-Controller # 1 modal präsentieren, um einen Navigations-Controller mit seinem Root-View-Controller als View-Controller # 1 darzustellen.

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]; 

Dies ist, wie es mit Storyboards aussieht: enter image description here

+0

Ok das funktioniert aber nicht sehr gut. Wenn die zweite Ansicht mit einem modalen Übergang angezeigt wird, habe ich die Taste gesehen, die gedrückt werden muss, um zu View3 zu wechseln. Wenn ich die Taste einmal drücke, wird die gleiche Ansicht mit modalem Übergang angezeigt, und wenn ich eine andere Ansicht drücke, zeigt sie dasselbe mit einem seltsamen Übergang. Ich weiß nicht, warum das passiert. – joan2404

+0

Welcher Code wird ausgeführt, wenn Sie die Taste drücken, die zum Drücken führen soll? Es sollte so etwas wie '[self.Navigationpushviewcontroller: <# UIViewController #> animiert: YES]; ' – MaxGabriel

+0

Hier ist der Code Ich verwende: View * MyViewController = [[View2 alloc] init]; View3 * descripcio = [[View3 alloc] init]; UINavigationController * navController = [[UINavigationController Alloc] initWithRootViewController: View2]; [self presentViewController: NavController animiert: JA Vollendung: nil]; [self.navigationController Pushviewcontroller: View3 animiert: JA]; – joan2404

0

Versuchen Sie folgendes:

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

Zunächst einmal bin ich nicht sicher, wo das gegant_se herkommt.

Zweitens, wenn Sie view2 von view1 so drücken, wie Sie view3 von view2 drücken, verwenden Sie kein Modal.

Immer wenn Sie einen Navigationscontroller verwenden, um einen Ansichtscontroller zu verschieben, hat der gerade gedrückte Ansichtscontroller über die navigationController-Eigenschaft einen Verweis auf den Navigationscontroller. Versuchen Sie dies:

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

Sorry über das gegant_se. Es war nur ein Test und ich habe vergessen, es zu ändern. – joan2404

0

versuchen diesen Code Alarmlist Ansicht Name ist.

AlarmListScreen * loscr = [[AlarmListScreen alloc] initWithNibName: null Bündel: nil];

[self.navigationController pushViewController: loscr animiert: YES];

[loscr release];