2010-04-11 11 views
16

Sto provando a spingere tre controller di visualizzazione sul controller di navigazione.Problema che spinge i controller di più viste sullo stack del controller di navigazione

[self.navigationController pushViewController:one animated:YES]; 
    [self.navigationController pushViewController:two animated:YES]; 
    [self.navigationController pushViewController:three animated:YES]; 

Il comportamento desiderato è che guarda tre mostrerà, e quando viene premuto il pulsante Indietro si andrà a visualizzare due e poi per visualizzare una ...

Quello che accade è che si è vista visibile e premendo indietro va a vedere due e poi di nuovo va a vederne uno. Il che equivale a dire che una vista è mostrata invece della terza.

In modo molto strano, guardando la vista, l'array di controller del controller di navigazione dopo le chiamate sopra mostra le voci corrette, e guardando la proprietà visibleViewController mostra di averne viste tre ... anche se la vista è visibile.

Se si passa a una vista secondaria da una vista visibile (che mostra nel punto di vista tre) e si preme indietro da quella vista secondaria ... si passa alla vista tre.

Assomiglia esso sta mostrando vista uno, ma sa che è in mostra tre ...

Sono completamente confuso ... tutte le idee?

Jim

risposta

35

Per i primi due spinte, non passano la bandiera animata come SI, impostarlo su NO:

[self.navigationController pushViewController:one animated: NO]; 
[self.navigationController pushViewController:two animated: NO]; 
[self.navigationController pushViewController:three animated: YES]; 

Questo vi darà l'effetto desiderato. Altrimenti, stai confondendo il sistema di animazione, poiché tenta di animare tre viste nello stesso spazio.

+1

Eccezionale. Grazie Ben! jim – Jim

+0

Grande risposta, se fosse la mia domanda, accetterei questo. Risolto il problema per me con XCode 5 e iOS 7. –

+0

Grazie per quello, l'OP troppo cattivo non l'ha mai accettato perché è la risposta corretta. Mi chiedo se i mod possono farlo? –

13

Il problema con la risposta corrente più avanzata è che uno e due saranno visibili in una frazione di secondo prima che il terzo diventi visibile. Non è un problema enorme, ma non farà una buona impressione sull'utente. La soluzione che stai cercando:

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy]; 
[controllers addObject:one]; 
[controllers addObject:two]; 
[controllers addObject:three]; 
[self.navigationController setViewControllers:controllers animated:YES]; 

Questo animerà in tre senza uno o due di diventare visibile nel processo.

+0

Questa risposta fornisce l'effetto desiderato, poiché l'intero scopo di impostare il flag animato su "no" è che non voglio vedere il primo e controllori di seconda visione. – mrl

+0

QUESTA È EFFETTIVAMENTE LA RISPOSTA CORRETTA –

Problemi correlati