2012-05-10 3 views
9

Scenario su un iPhone:Get UINavigationBar delegato per consentire "indietro", con una bella animazione

L'utente tocca il pulsante Indietro, il metodo UINavigationBar delegato (implementato in una sottoclasse di UINavigationController) restituisce YES, in questo modo:

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

    return YES; 
} 

Ora, secondo il docs, è responsabilità del app per tenere la barra di navigazione e dei contenuti in sincronia, e il luogo per farlo è nel metodo delegato

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

Il problema è che didPopItem viene chiamato solo dopo che la sequenza di animazione pop della barra di navigazione è terminata, quindi se chiamo [self popViewControllerAnimated: NO] lì, il risultato netto è che prima la barra di navigazione scorre indietro, quindi il contenuto.

E questo sembra solo sbagliato.

Se si chiama pop... del controllore di navigazione nel metodo delegato shouldPop..., viene visualizzato un messaggio di errore in cui si verificano sovrapposizioni di animazioni e lo stato finale non è pulito.

Quindi la mia domanda è, c'è un altro modo per far sì che UINavigationController cambi il contenuto, preferibilmente con una bella animazione sincronizzata con la barra di navigazione, ma senza creare confusione tra la barra di navigazione e il controller di navigazione?

Il sistema operativo di destinazione è iOS 4.2 e versioni successive.

Sono consapevole che avrei potuto creare un altro pulsante sinistro al posto del pulsante Indietro, ma ho trovato più pulito utilizzare un delegato, inoltre, ottengo un pulsante "reale", che è quello che voglio.

+0

Y u voler chiamare Metodo didPopItem prima comparsa sequenza di animazione di barra di navigazione come u avuto writter in 3 ° u wana fare u può si prega di fare paragrah..What clear it 3a paragh whihc stai pensando alla tua domanda principale –

+1

Perché stai usando una barra di navigazione separata con un 'UINavigationController' invece di usare quello che fornisce? – Greg

risposta

3

Se si utilizza un UINavigationController, non è necessario gestirlo da soli. Ti risparmierai un sacco di problemi semplicemente usando UINavigationController. Si occuperà di scoppiare la vista del contenuto insieme agli elementi della barra di navigazione.

1

Prova questa:

Immaginate di avere viewControllerA e viewControllerB. viewControllerA è il primo e non ha bisogno di una barra di navigazione e di viewControllerB.

Sul metodo viewWillAppear nel viewControllerA mettere il codice:

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

e quando schioccare la viewControllerB di farlo con l'animazione. Entrambe le animazioni saranno sincronizzate automaticamente.

Non so se questo vale per iOS4.2