2013-07-18 19 views
5

Moim wymaganiem jest to, że UITabBarController jest kontrolerem rootview i przy pierwszym uruchomieniu aplikacji chcę pokazać procedurę logowania, która jest wewnątrz UINavCon, i wyświetlam ją przez presentViewController.Can [self.window makeKeyAndVisible]; dzwoń przed ustawieniem rootviewcontroller

Nie chcę, aby kontroler UITabBarController był widoczny po raz pierwszy i nie chcę się logować, jak UINavCon pojawia się jako modalny.

Chcę sprawić, aby użytkownik miał wrażenie, że jeśli aplikacja zostanie uruchomiona po raz pierwszy, powinien pojawić się znak UINavCon. Więc tutaj jest mój kod:

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

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

[self.window makeKeyAndVisible];//is it correct to call it here? 

LoginVC *loginObj = [[LoginVC alloc]init]; 

self.navigationController = [[UINavigationController alloc] initWithRootViewController:cellPhoneNumber]; 

self.tabBarController = [[UITabBarController alloc]init]; 

self.window.rootViewController = self.tabBarController; 

[self.tabBarController presentViewController:self.navigationController animated:NO completion:^{}]; 

return YES; 
} 

Wołam [self.window makeKeyAndVisible]; na drugiej linii zaraz po uiwindowallocinit. Czy to jest poprawne, czy mogę napotkać problemy takie jak viewcontroller, który nie otrzymuje powiadomień o zdarzeniach lub orientacjach?

Odpowiedz

4

możesz zadzwonić, kiedy tylko chcesz. Wywołanie go wpływa na okno z-index i właściwość ekranu. to nie zależy od ustawiania konkretnej treści.

+0

Wielkie dzięki za odpowiedź, proszę, możesz mi powiedzieć, że zwykle mamy tylko jedno uiwindow w przypadku wyjścia zewnętrznego, to mamy kolejne uiwindow. Domyślnie tak jak w moim przypadku uiwindow jest na indeksie 0, a jabłko również mówi: "Jest to wygodna metoda, aby odbiornik był głównym oknem i wyświetlał go przed innymi oknami." co mają na myśli przed innymi oknami. –

+0

nic nie powstrzyma cię od posiadania wielu okien. na przykład często masz już 2 lub więcej .. twoje i okno klawiatury! –

5

Nie wspominałeś o tym, czy masz działający kod, czy nie, korzystając z implementacji. W każdym razie ostatnio przeprowadziłem podobną implementację, w której po zalogowaniu musimy przedstawić kontroler logowania, a następnie tabBarController, więc po prostu dzielę się swoją implementacją.

  1. Tworzenie kontrolera logowania i przedstawić go w didFinishLaunching metody.

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    LoginController *loginCObj= [[[MainScreenController alloc]init]autorelease]; 
    UINavigationController *navigationControllerObj = [[[UINavigationController alloc]initWithRootViewController:loginObj]autorelease]; 
    self.window.rootViewController = navigationControllerObj; 
    [self.window makeKeyAndVisible]; 
    
  2. Potem na udanym logowaniu swój login widoku kontrolera, nazywamy appDelegate metoda publicznego

    W kontrolerze logowania

    AppDelegate *appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    [appDel applicationLoggedInSuccesfully]; 
    

    W pliku appDelegate, dodać metodę tak:

    -(void)applicationLoggedInSuccesfully{ 
        UINavigationController *nv1 = [[[UINavigationController alloc] initWithNibName:nil bundle:nil]autorelease]; 
        TabController1 *v1 = [[[TabController1 alloc] initWithNibName:nil bundle:nil]autorelease]; 
        [nv1 pushViewController:v1 animated:NO]; 
    
        UITabBarController *tabController = [[[UITabBarController alloc] init]autorelease]; 
        tabController.viewControllers = @[nv1]; 
        tabController.delegate = self; 
        self.window.rootViewController = tabController; 
        [self.window makeKeyAndVisible]; 
    } 
    

Mam nadzieję, że ci to pomoże.

+1

dzięki za odpowiedź, chcę tylko wiedzieć, czy można [self.window makeKeyAndVisible]; można zadzwonić w dowolnej chwili lub zadzwonić na koniec lub po ustawieniu kontrolera rootviewcontroller. –

+0

Czy pojawił się problem z nawiązywaniem połączeń na początku? – HRM

+0

żadnych problemów, wszystko wydaje się działać dobrze, ale nie chcę później wpaść w kłopoty, więc to właśnie dlatego pytam i za wzrost wiedzy również :) –