2012-05-10 6 views
9

Szenario auf einem iPhone zu ermöglichen:Get UINavigationBar delegieren „zurück“, mit einer netten Animation

Der Benutzer tippt die Zurück-Taste, die UINavigationBar Delegatmethode (in einer Unterklasse von UINavigationController implementiert) gibt YES, wie folgt aus:

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item 
{ 
    // Verify stuff... 

    return YES; 
} 

nun nach den docs, dann ist es in der Verantwortung der App die Navigationsleiste und den Inhalt synchron zu halten, und den Ort, das zu tun, ist in der Delegatmethode

- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item 

Das Problem ist, dass didPopItem wird nur aufgerufen, nachdem Pop-Animation-Sequenz der Nav-Leiste beendet ist, also, wenn ich [self popViewControllerAnimated: NO] aufrufen, ist das Nettoergebnis, dass zuerst die Navigationsleiste zurück, dann den Inhalt.

Und das sieht einfach falsch aus.

Wenn ich die pop...pop... der Delegate shouldPop... Methode aufrufen, bekomme ich eine Fehlermeldung, dass ich Animationen überlappen bin, und der Endzustand ist nicht sauber.

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 nur eine andere linke Taste anstelle der Zurück-Taste erstellen konnte, aber ich fand es sauberer, einen Delegierten zu verwenden, plus, ich bekomme eine "echte" Schaltfläche zurück, was ich will.

+0

Y gültig ist u wollen Sequenz didPopItem Methode aufrufen, bevor Navigationsleiste Pop-Animation als u writter 3. paragrah..What u hatte wana kann u bitte zu tun machen Es ist klar, ur 3rd paragh whihc ist du denkst deine Hauptfrage –

+1

Warum verwenden Sie eine separate Navigationsleiste mit einem 'UINavigationController' statt mit der, die es bietet? – Greg

Antwort

3

Wenn Sie einen UINavigationController verwenden, müssen Sie dies nicht selbst verwalten. Sie sparen sich viel Mühe, indem Sie einfach den UINavigationController benutzen. Es wird darauf geachtet, die Inhaltsansicht zusammen mit den Elementen der Navigationsleiste zu öffnen.

1

Versuchen Sie folgendes:

Stellen Sie viewControllerA und viewControllerB haben. viewControllerA ist der erste und benötigt keine navigationBar und ViewControllerB tut es.

Auf dem Verfahren viewWillAppear in viewControllerA setzen Sie den Code:

[self.navigationController setNavigationBarHidden:YES animated:YES]; 

und wenn die viewControllerB knallen Sie tun dies mit Animation. Beide Animationen werden automatisch synchronisiert.

Sie wissen nicht, ob dies für iOS4.2

Verwandte Themen