2012-04-05 12 views
1

Ich habe eine iOS 5 Tabbed-Anwendung, mit Storyboards.iOS 5 Versucht, ViewController von Modal-Ansicht zu pushen

Mein Tabbar-Controller zeigt auf drei Navigationscontroller.

Von einem von ihnen sieht die Strömung wie folgt aus:

Start-Ansicht -> Fotoansicht (modal) -> Ansicht Katalog

Auf dem Foto Bildschirm, ich habe eine Schaltfläche mit dem folgenden Code:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    UIViewController *catalogView = [self.storyboard instantiateViewControllerWithIdentifier:@"CatalogView"]; 
    [self.navigationController pushViewController:catalogView animated:YES]; 
} 

ich habe versucht mit presentingViewController Herumalbern albern~~POS=HEADCOMP, parentViewController - auch Typ diejenigen zu einem UINavigationController gegossen. Das bewirkt, dass es zum Absturz zu bringen, mit der folgenden Fehlermeldung:

2012-04-06 00:32:45.808 myapp[19345:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController pushViewController:animated:]: unrecognized selector sent to instance 0x18d0d0' 

Damit mir sagt, dass ich nicht haben halten einen UINavigationController, sondern ein UITabBarController.

Gibt es einen Weg um dies zu umgehen?

Antwort

4

Ein "Push" -Stil-Übergang kann nur von einem View-Controller aus vorgenommen werden, der von einem UINavigationController verwaltet wird. Wenn Sie es versuchen, wird sonst nichts passieren.

Anstatt Ihre Fotoansicht modal anzuzeigen, wie Sie es in Ihrer Frage beschreiben, sollten Sie eine Instanz von UINavigationController als modale Ansicht anzeigen und die Fotoansicht als Stammansichtscontroller der Navigationsansicht festlegen. (Dies kann alles durch Storyboard eingerichtet werden). Dann wird dein Push-Übergang funktionieren.

Wenn Sie nicht für die obere Navigationsleiste möchten auf Ihrem ersten View-Controller erscheinen (Foto Ansicht) können Sie:

[self.navigationController setNavigationBarHidden:YES animated:NO] 

Dies wird oben Navigationsleiste ausblenden. Sobald Sie einen neuen View-Controller drücken, wenn Sie die Navigationsleiste wieder auf diesem und jedem nachfolgenden View-Controller anzeigen möchten, müssen Sie setNavigationBarHidden auf dem neuen Viewcontroller auf NO setzen.

[self.navigationController setNavigationBarHidden:NO animated:NO] 
+0

Haben Sie eine bevorzugte Ressource, um dies über das Storyboard einzurichten? Wenn ich ein neues Projekt einrichte, ist die Startansicht standardmäßig eine UIView und keine UINavigationView. Wenn es eine Möglichkeit gibt, die UINavigationView als Anfangsansicht festzulegen, wäre es schön zu sehen! – Danny

-1

Segue's sind die bevorzugte Methode für den Übergang von einer Szene zur anderen.

Sie können entweder eine Segue von dieser Schaltfläche oder von der VC selbst erstellen und diesen Abschnitt mit der Szene verbinden, die Sie verschieben möchten. Stellen Sie sicher, dass die Segue-Eigenschaft auf drücken und dann in der IBAction der Schaltfläche (vorausgesetzt, Sie an den VC verbunden) dies tun:

- (IBAction)acceptPhotoButtonPressed:(id)sender { 
    [self [email protected]"mySegueID" sender:nil]; 
} 

dann in der prepareForSegue Methode:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier [email protected]"mySegueID"]) { 
     // Do whatever setup you need to do before firing the segue 
    } 
} 

Wenn Sie verbinden die Gehe zu der Schaltfläche selbst, dann kannst du die performSegue-Methode komplett eliminieren (du brauchst diese IBAction wirklich nicht).

+0

Ich versuchte beide, nichts passiert, wenn ich den Knopf drücke. Vielleicht kann es nicht aus einer modalen Sicht getan werden? – MartinHN

+1

Ein "Push" -Stil-Übergang kann nur von einem View-Controller aus vorgenommen werden, der von einem UINavigationController verwaltet wird.Anstatt Ihre Photo-Ansicht modal anzuzeigen, zeigen Sie eine Instanz des UINavigation-Controllers als modale Ansicht an und machen Sie die Photo-Ansicht als Root-View-Controller der Navigationsansicht. Dann sollte dein Push-Übergang funktionieren. – jonkroll

+0

@jonkroll Das scheint zu funktionieren! Irgendwie kann ich die obere Leiste in der modalen Foto-Ansicht vermeiden, während immer noch angezeigt wird, wenn ich mit der Katalogansicht fortfahre? – MartinHN

Verwandte Themen