/ / iPhone: UINavigationController usuwa pierwszy widok na stosie po użyciu - iphone, uinavigationcontroller, pop

iPhone: UINavigationController usuwa pierwszy widok w stosie po użyciu - iphone, uinavigationcontroller, pop

iPhone

Mam kontroler UINavigationController, który ma widok logowania, który pojawia się po załadowaniu aplikacji.

Gdy użytkownik kliknie przycisk Zaloguj, umieszczamy następny widok na stosie i pojawia się. Chcę, aby użytkownik nie mógł wrócić do widoku logowania.

Jak usunąć loginview ze stosu po załadowaniu następnego widoku?

Uwaga: jest wymagane, aby jedynym kontenerem aplikacji był UINavigationController

Odpowiedzi:

1 dla odpowiedzi № 1

Możesz użyć setViewControllers: animated:aby zmodyfikować stos kontrolerów, ale zachęcam do ponownego rozważenia, czy naprawdę chcesz, aby kontroler widoku logowania był głównym elementem stosu nawigacji. Gdy użytkownicy widzą kontroler nawigacji, spodziewają się, że będą nawigować w górę iw dół w hierarchii ekranów zorganizowane w strukturę drzewa. Zmiana korzenia tego drzewa podważa nieco metaforę.

Rozważ użycie prezentacji modalnej, aby poinformować, że logowanie wykracza poza główną hierarchiczną strukturę nawigacji aplikacji. Oto kilka opcji:

A. Rozpocznij od logowania do kontrolera widoku i przedstaw modalnie kontroler nawigacji.

Jeśli twój kontroler widoku logowania zawsze będziebyć pierwszym ekranem, który widzi użytkownik, możesz dodać jego widok bezpośrednio do okna bez kontrolera nawigacyjnego. Następnie po zalogowaniu się użytkownika utwórz kontroler nawigacji i przedstaw go, wywołując presentModalViewController: animated: z kontrolera widoku logowania.

B. Zainicjuj kontroler nawigacji z jego prawdziwym korzeniem i przedstaw modalnie kontroler widoku logowania.

Ta opcja może być warta rozważenia, jeśli loginzachęta nie jest zawsze pierwszym widokiem, jaki widzi użytkownik, zwłaszcza jeśli monit logowania może pojawić się w innych kontekstach. Na przykład zastosowałem to podejście w aplikacji, która umożliwia użytkownikowi dostęp do niektórych sekcji w trybie offline lub anonimowo. Monit logowania jest prezentowany modalnie, gdy użytkownik próbuje uzyskać dostęp do treści wymagających uwierzytelnienia.


0 dla odpowiedzi nr 2

Usuń przycisk Wstecz, ustawiając wartość backButtonItem w navigationItem kontrolera logowania na wartość nil.


0 dla odpowiedzi № 3

W powyższym przypadku kontroler widoku logowania będzie nazywany kontrolerem głównym dla Twojego kontrolera UINavigationController

Przeczytaj poniżej Jak usunąć główny kontroler UINavigationController

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller%E2%80%99s-root-view-controller/


0 dla odpowiedzi nr 4

Odkryłem, że wystarczy ustawić właściwość ViewControllers, aby załatwić sprawę.

(Używamy C # i .NET do tworzenia aplikacji na iPhone'a za pomocą MonoTouch)

public override void ViewDidAppear (bool animated)
{
NavigationController.ViewControllers = new UIViewController[] { this };
}

0 dla odpowiedzi № 5

użyj NSUserdefault, aby ustawić wartość kontrolną bool w celu weryfikacji, aby wyświetlić stronę logowania lub następną stronę

na przykład, gdy strona logowania otrzyma hasło użytkownika, a następnie wyśle ​​je na serwer i otrzyma wynik jako sukces lub niepowodzenie

jeśli się powiedzie, ustaw Bool w NSuserdefault na yes

i naciśnij nextview po pomyślnym zalogowaniu.

jeśli następnym razem użytkownik wejdzie do Twojej aplikacji, musisz najpierw sprawdzić NSuserdefault dla tej wartości bool

zgodnie z tym możesz wcisnąć nextviewcontroller lub stronę logowania.

to jest to.

w nsuserdefault u można określić ciąg dla klucza zamiast bool

po pomyślnym zalogowaniu ustaw isLogined na yes

NSUserDefaults *std = [NSUserDefaults standardUserDefaults];

[std setObject:@"yes" forKey:@"isLogined"];

jeśli nie ustawione NIE

na stronie logowania przed wypychaniem po prostu sprawdź, czy isLogined jest tak, czy nie

zgodnie z tym możesz wypchnąć stronę logowania lub następną stronę

do weryfikacji

[std stringforkey: @ "isLogined"];