2013-07-18 13 views
5

Il mio requisito è che UITabBarController è la RootViewController e sulla primissima momento del lancio app voglio mostrare procedura di login che si trova all'interno UINavCon, e io sono la visualizzazione attraverso presentViewController.Può [self.window makeKeyAndVisible]; essere chiamato prima di impostare RootViewController

io non voglio l'UITabBarController visibile per la prima volta e non voglio come login UINavCon popping come modale.

Voglio fare l'esperienza degli utenti che se un'applicazione avvia per la prima volta accesso UINavCon dovrebbe essere visibile. Così qui è il mio codice:

- (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; 
} 

Chiedo [self.window makeKeyAndVisible]; sulla seconda linea a destra dopo uiwindowallocinit. È corretto fare questo o posso riscontrare problemi come il controllo del viewcontroller che non riceve notifiche di eventi o orientamenti?

risposta

4

puoi chiamarlo quando vuoi. La chiamata influisce sullo z-index e sulla proprietà dello schermo della finestra. non dipende da alcun contenuto specifico impostato.

+0

Grazie mille per aver risposto, per favore puoi dirmi che normalmente abbiamo solo una finestra in caso di uscita esterna, quindi abbiamo un'altra finestra. Di default come nel mio caso l'uiwindow è su 0 indice e Apple dice anche "Questo è un metodo comodo per rendere il ricevitore la finestra principale e visualizzarlo davanti ad altre finestre". cosa significano di fronte ad altre finestre. –

+0

bene nulla ti impedisce di avere più finestre. per esempio. spesso ne hai già 2 o più .. la tua e la finestra della tastiera! –

5

Non hai menzionato che hai ottenuto il codice funzionante o meno usando la tua implementazione. Ad ogni modo, recentemente ho fatto un simile tipo di implementazione in cui è necessario presentare il controller di accesso e quindi tabBarController dopo aver effettuato l'accesso, quindi è sufficiente condividere la mia implementazione.

  1. Crea il controller di accesso e presentarlo in didFinishLaunching metodo.

    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. Dopo che il login successo nel vostro controller della vista di login, chiamare un metodo pubblico AppDelegate

    controller login

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

    Nel file AppDelegate, aggiungere un metodo come questo:

    -(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]; 
    } 
    

Spero che ti possa aiutare.

+1

grazie per aver risposto, voglio solo sapere che può [self.window makeKeyAndVisible]; può essere chiamato in qualsiasi momento o deve essere chiamato alla fine o dopo aver impostato rootviewcontroller. –

+0

Hai trovato problemi a chiamare all'inizio? – HRM

+0

problemi eppure tutto sembra funzionare bene, ma io non voglio finire nei guai più tardi, quindi questo è il motivo per cui sto chiedendo e per incremento di conoscenza anche :) –

Problemi correlati