Erhalte UINavigationBar delegate um "back" mit einer netten Animation zu erlauben

9

Szenario auf einem iPhone:

Der Benutzer tippt auf die Zurück-Schaltfläche, die UINavigationBar -Delegatenmethode (implementiert in einer Unterklasse von UINavigationController ) gibt YES zurück, wie folgt:

%Vor%

Nach den Dokumenten ist dies jetzt der Fall Es liegt in der Verantwortung der App, die Navigationsleiste und den Inhalt synchron zu halten, und der Ort dafür ist die Delegate-Methode

%Vor%

Das Problem ist, dass didPopItem erst aufgerufen wird, wenn die Pop-Animationssequenz der Navigationsleiste beendet ist. Wenn ich also [self popViewControllerAnimated: NO] aufruft, ist das Nettoergebnis, dass zuerst die Navigationsleiste und dann der Inhalt zurückgleitet.

Und das sieht einfach falsch aus.

Wenn ich den pop... des Navigationscontrollers in der Methode delegate shouldPop... aufrufen, erhalte ich die Fehlermeldung, dass ich Animationen überschneide und der Endzustand nicht sauber ist.

Also meine Frage ist, gibt es eine andere Möglichkeit, um den UINavigationController Inhalte zu ändern, vorzugsweise mit einer netten Animation synchron mit der Navigationsleiste, aber ohne Verwirrung zwischen der Navigationsleiste und dem Navigationscontroller zu schaffen?

Das Ziel-Betriebssystem ist iOS 4.2 und höher.

Ich bin mir bewusst, dass ich anstelle der Zurück-Schaltfläche einfach eine weitere linke Schaltfläche erstellen könnte, aber ich fand es sauberer, einen Delegaten zu verwenden, und ich bekomme eine "echte" Zurück-Schaltfläche, die ich möchte.

    
Monolo 10.05.2012, 21:47
quelle

2 Antworten

3

Wenn Sie einen UINavigationController verwenden, müssen Sie dies nicht selbst verwalten. Sie sparen sich viel Mühe, indem Sie einfach den UINavigationController verwenden. Es wird dafür sorgen, dass die Inhaltsansicht zusammen mit den Elementen der Navigationsleiste angezeigt wird.

    
BrickWall10 14.03.2013 05:53
quelle
1

Versuchen Sie Folgendes:

Stellen Sie sich vor, Sie haben viewControllerA und viewControllerB. viewControllerA ist der erste und benötigt keine navigationBar und viewControllerB.

Setzen Sie bei der Methode viewWillAppear in viewControllerA den Code:

%Vor%

und wenn Sie den viewControllerB aufrufen, tun Sie dies mit Animation. Beide Animationen werden automatisch synchronisiert.

Weiß nicht, ob das für iOS4.2 gilt.

    
pedros 14.03.2013 09:38
quelle