2012-06-26 9 views
5

Bene, per alcuni di voi questa domanda può sembrare ridicola, ma sto discutendo con i miei compagni di squadra sulla progettazione di un'app per iOS e ho bisogno della vostra opinione al riguardo.Dovremmo evitare di spingere il loop continuo tra due viste?

Il vecchio design che non sono d'accordo è come seguendo

  • Abbiamo ViewControllerA che contiene Button "Scheda B". Il pulsante ha un segue PUSH per andare a B.
  • Abbiamo ViewControllerB che contiene Button "andare a un" .Il pulsante ha una segue PUSH per andare A.
  • Dobbiamo viaggiare tra il 2 ViewController un sacco.

Come si può vedere, c'è un ciclo continuo tra ViewController A e B e penso che non dovremmo mai lasciare che ciò accada. Preferirei andare da B a A con il pulsante "Indietro" nella barra di navigazione.

Quanto è grave il ciclo PUSH segue in progettazione? È accettabile in alcuni casi? Dove posso vedere il buon design consigliato da Apple (se ce ne sono?)

EDIT: soluzione provo "pop prima di spinta" da nfarshchi ma non si work.This è come ho fatto: 1) Non riesco a creare sequenze da VC A a VC B e passa da VC B a VC A contemporaneamente. Sembra che lo storyboard gli impedisca di accadere 2) Così creo un seguito il cui identificatore è "gotoB" dal pulsante "Vai a B" in VC A a VC B e uno segue il cui identificatore è "gotoA" dal pulsante "Vai a A "in VC B a VC A.

Così Storyboard sarebbe simile a questo:

VC X --- --- Spingere> VC Un < ---- Spingere ----> VC B (Il motivo per cui ho bisogno di ViewController X è spiegato più avanti) 3) In VC AI avere questo:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    NSLog(@"Prepage for segue go to B") ; 
    if ([[segue identifier] isEqualToString:@"gotoB"]) { 
     [self.navigationController popViewControllerAnimated:NO]; 

    } 
} 

ho bisogno VC X perché non posso pop un ViewController da Stack se c'è un solo ViewController in là.

Ora sembra giusto, ma quando ho fatto clic su "Vai a B", è andato invece a VC X. Era chiaro che il precedente popViewControllerAnimated: ha inserito VC A, e questo è tutto, il passaggio a VC B non è stato più licenziato. Il risultato è stato che il VC B non è stato inserito nello stack come previsto.

Così penso che sia impraticabile per implementare la soluzione di nfarshchi

risposta

3

Si può fare, ma prendere in considerazione quando si preme un UIViewController e di nuovo spingere in voi chiamerà un sacco di metodi di ri progettazione esso. se vuoi spostarti molto su di loro è meglio usare UINavigationController. in questo caso li fai solo una volta e puoi navigare facilmente tra di loro. utilizza meno risorse di sistema

+0

Grazie. Ma non credo che la tua soluzione su "pop before push" funzionerà – grandagile

+1

No man, non volevo dire che tu pop prima di spingere, stavo dicendo usando 'UINavigationController', solo una volta premi il tuo' UIViewController' e anche tu puoi avere un semplice pulsante indietro. e non c'è bisogno di farlo di nuovo. 'UINavigationController' lo farà per te. – nfarshchi

+0

Considerate che avete 'ViewControllerA' e' ViewControllerB'. su 'A' puoi avere un pulsante e [self.navigationController pushViewController: viewControllerB animated: YES]; – nfarshchi

1

La transizione push/pop deve essere utilizzata solo se lo spazio virtuale 2D creato dalla transizione è realistico. Se l'utente vede 10 transizioni push di fila, sentirà come se stessero andando sempre più in profondità in una gerarchia e può portare confusione e un cattivo modello mentale, specialmente se in realtà ti stai semplicemente spostando tra due controller di vista.

L'utilizzo del pulsante Indietro sarebbe una soluzione migliore, oppure è possibile effettuare una transizione personalizzata che renda più chiaro all'utente ciò che sta accadendo. Forse sarebbe anche opportuna una transizione inaspettata.

Problemi correlati