Ich habe ein Problem mit einer iPhone App mit UINavigationController. Wenn ich pushNavigationController verwende, funktioniert es gut. Das iPhone führt seine Animation durch, während es zum nächsten ViewController wechselt. Wenn Sie jedoch ein Array von ViewControllern und die setViewControllers-Methode verwenden, weist die Animation einen Fehler auf, der zu einem deutlich sichtbaren Animationsfehler werden kann.Die Verwendung von setViewController von UINavigationController auf dem iPhone verhält sich nicht richtig
Das folgende Snippet wird im Stamm ViewController aufgerufen. Abhängig von einer Bedingung sollte entweder zu ViewController1 gewechselt werden, oder es sollte direkt zu ViewController2 gehen. Im letzteren Fall kann der Benutzer zurück zu vc1 und dann zum root navigieren.
NSMutableArray* viewControllers = [NSMutableArray arrayWithCapacity:2];
// put us on the stack
[viewControllers addObject:self];
// add first VC
AuthentificationViewController* authentificationViewController =
[[[AuthentificationViewController alloc] initWithNibName:@"AuthentificationViewController" bundle:nil] autorelease];
[viewControllers addObject:authentificationViewController];
if (someCondition == YES)
{
UserAssignmentsListViewController* userAssignmentsListViewController =
[[[UserAssignmentsListViewController alloc] initWithNibName:@"UserAssignmentsOverviewViewController" bundle:nil] autorelease];
[viewControllers addObject:userAssignmentsListViewController];
}
[self.navigationController
setViewControllers:[NSArray arrayWithArray:viewControllers] animated:YES];
Wie man sehen kann ich die ersten hinzufügen würde und vielleicht die zweite VC auf das Array, schließlich die Navigation mit Animation Stack Einstellung. Dies funktioniert ordnungsgemäß, wenn ich nur den ersten Controller hinzufüge. Wenn die Animation jedoch zum zweiten Controller gehen soll, wird der Titel der Navigationsleiste nicht "einfliegen". Stattdessen gibt es einen leeren Titel, bis die Animation beendet ist. Und noch schlimmer, wenn ich den Navbar-Titel durch eine benutzerdefinierte Schaltfläche ersetze, wird diese Schaltfläche in der oberen linken Ecke angezeigt, bis die Animation beendet ist. Das ist ein ziemlich anzeigender Fehler.
Ich habe versucht, eine Problemumgehung mit mehreren PushViewController-Methoden zu verwenden, aber die Animation sieht nicht richtig aus. Ich möchte, dass die Navigation ihre Animation auf die gleiche Weise wie pushViewController ausführt. Der einzige Unterschied ist, dass ich keinen VC hinzufüge, sondern den gesamten Stack auf einmal setze. Gibt es hier einen weiteren Workaround, oder könnte dies als Bug eines Frameworks betrachtet werden? Ich dachte darüber nach, nur pushNavController für VC2 zu verwenden, und dann irgendwie VC1 in den Stack einzufügen, aber das scheint nicht möglich zu sein.
Danke für alle Tipps und Hinweise. :-)
Technische Daten: Ich verwende iOS 4.2, kompiliere für 4.0.
Haben Sie eine Lösung gefunden? Wenn ja, bitte teilen. Ich stehe vor einem ähnlichen Animationsproblem. – Pria
Nein, keine Lösung, die wie das normale Verhalten mit pushNavigationController funktioniert. Ich füge noch VC hinzu und rufe setVIEWControllers auf, aber die zweite VC hat zuerst keinen Navigationsleistentitel. Ich stelle es ein (in meinem Fall ist es ein Titelknopf), nachdem die Animation fertig ist. Sieht nicht so gut aus, funktioniert aber. – qwertfisch