2014-05-19 3 views
5

Ich bin neu in IOS. Ich arbeite an einem Projekt, stecke aber an diesem Fehler fest.iOS: verschachtelte Push-Animation kann zu beschädigter Navigationsleiste

Grundsätzlich ist der folgende Code zum Laden eines neuen Xib, wenn eine Zeile angeklickt wird, wenn die Anweisung verwendet wird, um zu überprüfen, ob auf eine bestimmte Zeile geklickt wird.

if (#something) { 
    UIViewController *controller = [[NSClassFromString(@"abcd") alloc] initWithNibName:@"abcd" bundle:nil]; 
    [self.navigationController pushViewController:controller animated:YES]; 
} else { 
    methodsViewController.r = [sel objectForKey:@"cvb"]; 
    methodsViewController.m = [sel objectForKey:@"bnm"]; 
    #adding controller 
    [self.navigationController pushViewController:controller animated:NO]; 
} 

das Problem ist, dass, wenn ich auf einer Zeile klicken, um es auf die neue Seite geht, aber wenn ich die Zurück-Button in der Navigationsleiste klicken, wird die vorherige Seite wird nicht geladen, sondern zeigt eine schwarze Seite. Der Fehler, der im Protokoll angezeigt wird, ist: verschachtelte Push-Animation kann zu beschädigter Navigationsleiste führen. Beenden einer Navigationsüberleitung in einem unerwarteten Zustand. Der Unterbaum der Navigationsleiste könnte beschädigt sein.

Ich suchte alle ähnliche Antwort, aber konnte nicht die Lösung bekommen. Hilfe wird sehr geschätzt.

Dank im Voraus

Antwort

4

Sie ein Segue im Storyboard haben, die, wenn Zeile eine Tabelle auslöst ausgewählt ist. Wenn Sie einen Controller auch manuell drücken, wenn eine Zeile ausgewählt ist, tritt der von Ihnen beschriebene Fehler auf. Sie sollten den Übergang aus dem Storyboard entfernen.

EDIT: Mehr Details:

Ich nehme an, Sie verwenden ein Storyboard (mehr als ein View-Controller im Design-Fenster). Wenn Sie es nicht benutzen, bin ich auf der falschen Spur. Zum Beispiel nehmen diesen Screenshot von einem meiner Projekte:

Storyboard screenshot

Wenn Sie die Kontrolle-gezogen haben aus der „Reihe“, um die Ansicht-Controller auf der rechten Seite, können Sie eine segue erstellt. Es ist wahrscheinlich, dass dieser Übergang ausgelöst wird, wenn Sie eine Zeile in der Tabellenansicht im linken Ansichtscontroller auswählen. Wenn Sie ein Standardprojekt verwendet haben, ist ein solcher Übergang möglicherweise bereits vorhanden und Sie haben ihn nicht selbst erstellt.

Das Segment wird "automatisch" ausgelöst, wenn Sie eine Zeile auswählen. Wenn Sie View-Controller manuell in den Code schieben, können Sie einen "zweiten Push" verursachen, der den Navigationscontroller stört.

Sie können den Abschnitt löschen, indem Sie auf die dicke Linie zwischen den Szenen oder auf dieses runde Symbol klicken und Löschen drücken.


Wenn Sie eine segue benötigen, die ausgelöst wird nicht automatisch, wenn eine Zeile ausgewählt wird, können Sie steuern, ziehen Sie es aus diesem gelben Symbol auf die Zielszene. Ein Menü sollte erscheinen und Sie würden eine der Optionen unter "manuell" wählen. Dann muss der Übergang manuell ausgelöst werden, die Sie im Code tun würden:

[self performSegueWithIdentifier:@"SegueId" sender:self]; 

Wenn Sie auf dem runden segue Symbol klicken im Storyboard, können Sie eine Kennung im Versorgungs Fenster im Attribute-Inspektoren im Bereich gesetzt "Kennung" Dieser Bezeichner ist die Zeichenfolge, die in der obigen Codezeile verwendet wird.

+0

ich bin neu zu ios können Sie pls detaillierter erzählen? – George

+0

@GeorgeK Ich fügte der Antwort weitere Details hinzu.Die Bildhostingseite scheint einige Schluckauf zu haben - möge das Bild in ein paar Minuten auftauchen –

1

Ich wurde mit diesem gefangen, indem ich vergaß, eine Pause einzufügen; nach einem Fall: in einer switch() -Anweisung. Jeder Fall: hatte einen [self performSegueWithIdentifier: ... Ich fiel zum nächsten Fall durch und führte 2 dieser Segue-Darsteller aus.

Verwandte Themen