6

Desidero visualizzare in modo condizionale una schermata di accesso all'avvio di un'applicazione ipad. Non voglio renderlo parte di un seguito predefinito, dal momento che hanno solo bisogno di accedere periodicamente, non ogni volta.visualizza una vista modale all'avvio dell'applicazione ipad

Ci sono numerousexamples della mia domanda, ma sembrano tutti anticipare ios5. Quando uso gli storyboard, tuttavia, niente sembra funzionare.

per ridurre questo alla sua essenza, * crea una nuova applicazione un'unica vista, utilizzando storyboard * aggiungere una nuova viewcontroller allo storyboard, dare un identificatore di "loginscreen" * mettere un'etichetta di testo su ogni vista distinguerli visivamente. * nel AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    UIStoryboard *storyboard = [self.window.rootViewController storyboard]; 
    UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"]; 
    [self.window.rootViewController presentModalViewController:loginController animated:TRUE]; 

    return YES; 
} 

Da quello che ho visto degli esempi, che dovrebbe funzionare. Ma mostra sempre in modo coerente la vista originale di rootViewController. Nessun errore però.

Qualcuno può indicare la cosa (probabilmente piccola) che mi manca?

risposta

2

Si scopre che l'app non è in uno stato attivo nel metodo didFinishLaunching.

Il posto giusto per mettere questo è

- (void)applicationDidBecomeActive:(UIApplication *)application 
{ 
    UIStoryboard *storyboard = self.window.rootViewController.storyboard; 
    UIViewController *loginController = [storyboard instantiateViewControllerWithIdentifier:@"loginScreen"]; 
    [self.window.rootViewController presentModalViewController:loginController animated:NO]; 
} 
2

@deafgreatdane: La soluzione presenterebbe il controller di vista modale ogni volta che l'applicazione diventa attiva da essere in uno stato di fondo (che può essere desiderabile).

Nel mio caso (usando questo per mostrare una sola volta solo lanciare schermo) vorrei aggiungere un dispatch_once a quella soluzione per fare in modo che lo schermo lancio modale viene visualizzata solo una volta:

- (void)applicationDidBecomeActive:(UIApplication*)application 
{ 
    static dispatch_once_t onceToken; 

    dispatch_once(&onceToken,^
       { 
        SomeLaunchViewController* launchViewController = [[SomeLaunchViewController alloc] init]; 
        [self.window.rootViewController presentViewController:launchViewController animated:NO completion:NULL]; 
       }); 
} 

Questo snippet di codice utilizza ARC.

Problemi correlati