2012-01-27 12 views
7

Mam aplikację ios5 opracowaną przy użyciu scenorysów, które aktualnie wyświetlają widok kontrolera paska kart przy pierwszym uruchomieniu. Chciałbym wyświetlić ekran logowania przed wyświetleniem kontrolera paska kart. Użytkownik wprowadziłby swoją nazwę użytkownika & hasło, system następnie uwierzytelnił użytkownika, a następnie, jeśli się powiedzie, wyświetlić kontroler paska kart.Uruchamianie widoku logowania przed wyświetleniem kontrolera paska tabulacji

Próbowałem następujące 3 opcje bez powodzenia .. jakieś pomysły?

(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    // Option 1 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    PointsViewController *firstVC = [[tabBarController viewControllers] objectAtIndex:0]; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [firstVC.navigationController pushViewController:loginViewController animated:YES]; 

    // Option 2 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentViewController:loginViewController animated:NO completion:nil]; 

    // Option 3 
    UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    UIViewController *loginViewController = [[LoginViewController alloc] init]; 
    [tabBarController presentModalViewController:loginViewController animated:NO]; 

    return YES; 
} 

Odpowiedz

18

końcu zorientowali ten jeden .. Oto co trzeba zrobić:

  1. Dodaj osobnego logowania widok na storyboard.

  2. Wybierz widok logowania i inspektora atrybutów, zaznacz opcję "Czy kontroler widoku początkowego". Spowoduje to przełączenie początkowego widoku uruchamianego z kontrolera tabulacji na widok logowania, rozwiązując w ten sposób cały problem z wyświetlaniem ekranu logowania.

  3. Dodaj przycisk do widoku logowania i utwórz przejście, aby załadować kontroler zakładek po naciśnięciu przycisku. (Możesz także utworzyć przejście z widoku logowania do widoku kontrolera kart i programowo wywołać zmianę w zależności od potrzeb).

  4. Wybierz widok logowania i wybierz opcję Edytor> osadzić w> Navigation Controller

  5. W Inspektorze atrybutów kontrolera nawigacji, odznacz „pokazuje pasek nawigacyjny” opcję (jest to zmiana kosmetyczna, jestem zakładając, że nie trzeba pasek nawigacyjny pokazujący na ekranie logowania !!)

to jest to :)

+0

Jak przekazać wartość do firstviewcontroller paska kart przy użyciu segue? Nie mogłem go uruchomić – meda

+0

nie przekazujesz wartości z segue. Jedną z możliwych opcji jest przechowywanie wartości, którą chcesz przekazać jako właściwość w AppDelegate i uzyskanie dostępu do wartości z widoku docelowego. –

+0

To działa! Ale jak wyłączyć push do nowego okna, jeśli hasło jest nieprawidłowe? – Gank

0

Możesz użyć widoku modalnego. Możesz sprawdzić, czy użytkownik jest zalogowany. Jeśli nie, możesz użyć widoku modalnego, aby uzyskać dane logowania. Możesz utworzyć UIViewController w storyboardie, a następnie użyć metody instantiateViewControllerWithIdentifier: do utworzenia ekranu logowania z storyboardu. Następnie po prostu pokaż to modalnie.

+0

A gdzie można uruchomić okno modalne? Metoda viewDidAppear pierwszej zakładki? Czy istnieje sposób uruchomienia okna modalnego przed załadowaniem kart? –

+0

Jeśli chcesz, aby wyświetlał się przed renderowaniem rzeczy, użyj viewWillAppear, aby wykonać sprawdzanie i uruchomić widok modalny. Po modalnym otwarciu nowego kontrolera widoku/widoku przetwarzanie czeka, aż widok modalny zostanie zamknięty. Metoda znajdowałaby się w głównym kontrolerze kontrolera kart, a nie kontrolera kart. W razie potrzeby można go umieścić w każdym z kontrolerów widoku root kontrolki zakładki lub można podklasę UIViewControl i użyć jej dla każdego. – Rob

+1

Próbowałem tego. To, co widzę, to to, że początkowa karta zostaje załadowana, a następnie okno modalne zostaje na nią nałożone. Wizualnie to nie jest przyjemne. Chciałbym, aby użytkownik najpierw zobaczył okno logowania. Mam uruchomienie widoku logowania przeprowadzanego z metody viewWillAppear na pierwszej karcie. Oto jak wygląda mój kod.

 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Display the login view modally [self performSegueWithIdentifier:@"ShowLogin" sender:self]; }

0

Poznałem ten problem właśnie teraz i ja doskonale rozwiązał ten dodając następujący kod, który również nie używać.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 
    [self.window makeKeyAndVisible]; 
} 
Powiązane problemy