2012-06-26 13 views
5

Cóż, niektórym z was to pytanie może wydawać się absurdalne, ale omawiam z kolegami z zespołu projekt aplikacji ios i potrzebuję waszej opinii na ten temat.Czy należy unikać przepychania między dwoma widokami?

Stara konstrukcja, która nie zgadzam się następująco

  • Mamy ViewControllerA który zawiera przycisk „Idź do punktu B”. Przycisk ma segue PUSH, aby przejść do punktu B.
  • Mamy ViewControllerB który zawiera przycisk „Przejdź do” .Powierzchnia przycisku ma segue PUSH, aby przejść do A.
  • Mamy podróżować między 2 a ViewController los.

Jak widać, pomiędzy ViewController A i B istnieje pętla segue i myślę, że nigdy nie powinniśmy pozwolić, aby to się zdarzyło. Wolałbym przejść od B do A za pomocą przycisku "Wstecz" w pasku nawigacyjnym.

Jak poważny jest projekt pętli PUSH? Czy jest to dopuszczalne w niektórych przypadkach? Gdzie mogę znaleźć dobry projekt zalecaną przez Apple (jeśli takie istnieją?)

EDIT: staram „pop przed naciśnięciem” rozwiązanie przez nfarshchi ale nie work.This zrobić to jak to zrobiłem: 1) Nie mogę utworzyć przejścia z VC A na VC B i jednocześnie przejść z VC B na VC A. Wygląda na to, że storyboard uniemożliwia to. 2) W ten sposób utworzę jeden segue, którego identyfikator to "gotoB" z przycisku "Go to B" w VC A na VC B i jedną zmianę, której identyfikator to "gotoA" z przycisku "Przejdź do A "w VC B do VC A.

Więc Storyboard będzie wyglądać następująco:

VC X --- Wciśnij ---> VC < push ---- ----> VC B (dlatego potrzebne ViewController X jest wyjaśnione w dalszej części) 3) VC AI mieć to:

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

    } 
} 

trzeba VC X, ponieważ nie można pop ViewController ze Stack, jeśli jest tam tylko jeden ViewController.

Teraz wygląda na to, że dobrze, ale kiedy kliknąłem "Przejdź do B", zamiast tego pojawiło się VC X. Wyraźnie widać, że powyższy popViewControllerAnimated: pobił VC A, i to wszystko, przejście na VC B nie było już zwalniane. W rezultacie VC B nie został wepchnięty do Stack zgodnie z oczekiwaniami.

Tak więc myślę, że to jest niemożliwe do realizacji roztworowi nfarshchi za

Odpowiedz

3

Można to zrobić, ale pod uwagę podczas wypychania UIViewController i ponownie wcisnąć go w was wezwie wiele sposobów, aby ponownie go zaprojektować. jeśli chcesz dużo się przed nimi przesunąć, lepiej użyć UINavigationController. w tym przypadku robisz je tylko raz i możesz nawigować między nimi z łatwością. to będzie zużywać mniej zasobów systemowych.

+0

Dzięki. Ale nie sądzę, że twoje rozwiązanie dotyczące "pop przed push" będzie działało – grandagile

+1

Żaden człowiek, nie chciałem, żebyś wyskakiwał zanim nacisnąłeś, mówiłem używając 'UINavigationController' tylko raz naciskasz' UIViewController', a także możesz mieć prosty przycisk powrotu. i nie ma potrzeby, aby ponownie go pop. 'UINavigationController' zrobi to za ciebie. – nfarshchi

+0

Należy wziąć pod uwagę, że masz 'ViewControllerA' i' ViewControllerB'. na 'A' możesz mieć Button i [self.navigationController pushViewController: viewControllerB animowane: YES]; – nfarshchi

1

Przejście typu "push/pop" powinno być używane tylko wtedy, gdy wirtualna przestrzeń 2D, którą tworzy przejście, jest realistyczna. Jeśli użytkownik zobaczy 10 przesunięć wypychanych w jednym rzędzie, będzie miał wrażenie, że wchodzą głębiej i głębiej w hierarchię, co może prowadzić do zamieszania i złego modelu mentalnego, zwłaszcza jeśli w rzeczywistości po prostu poruszasz się pomiędzy dwoma kontrolerami widoku.

Korzystanie z przycisku Wstecz byłoby lepszym rozwiązaniem lub można wprowadzić własne niestandardowe przejście, które będzie bardziej przejrzyste dla użytkownika, co się dzieje. Być może odpowiednie byłoby również przejście w drugą stronę.

Powiązane problemy