2012-01-27 2 views
7

Ho un'app ios5 sviluppata utilizzando gli storyboard che attualmente visualizza una vista del controller della barra delle schede all'avvio iniziale. Vorrei visualizzare una schermata di accesso prima che venga visualizzato il controller della barra delle schede. L'utente immette il nome utente & password, il sistema quindi autentica l'utente e, in caso di esito positivo, visualizza il controller della barra delle linguette.Avvio di una vista di accesso prima che venga visualizzato il controller della barra delle schede

Ho provato le seguenti 3 opzioni senza fortuna .. qualche idea?

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

risposta

18

finalmente capito questo fuori .. qui è ciò che devi fare:

  1. Aggiungere una vista di accesso autonomo allo storyboard.

  2. Selezionare la vista di accesso e nell'ispettore attributi, selezionare "È il controller della vista iniziale". In questo modo la visualizzazione iniziale viene avviata dal controller della scheda alla vista di accesso, risolvendo quindi l'intero problema della visualizzazione della schermata di accesso.

  3. Aggiungere un pulsante alla vista di accesso e creare un seguito per caricare il controller della scheda alla pressione del pulsante. (O è possibile creare un seguito dalla vista di accesso alla vista del controller di tabulazione e richiamare a livello di programmazione il seguito, se necessario).

  4. Selezionare la vista di login e scegliere l'opzione Editor> Incorpora in> Navigation Controller

  5. Nel attributi ispettore per il controller di navigazione, deselezionare la 'Mostra barra di navigazione' opzione (si tratta di un cambiamento cosmetico, io sono supponendo che non hanno bisogno di una barra di navigazione che mostra sullo schermo di login !!)

Questo è tutto :)

+0

come posso passare il valore al primo viewcontroller della barra delle schede usando segue? Non riuscivo a farlo funzionare – meda

+0

non si passa un valore con il seguito. Una possibile opzione è quella di memorizzare il valore che si desidera passare come proprietà su AppDelegate e accedere semplicemente al valore dalla vista di destinazione. –

+0

Funziona! Ma come disabilitare la push in una nuova finestra se la password non è corretta? – Gank

0

È possibile utilizzare una vista modale. È possibile verificare se l'utente ha effettuato l'accesso. In caso contrario, è possibile utilizzare una vista modale per ottenere le informazioni di accesso. È possibile creare un UIViewController nello storyboard e quindi utilizzare il metodo instantiateViewControllerWithIdentifier: per creare la schermata di accesso dallo storyboard. Quindi mostralo semplicemente in modo modale.

+0

E da dove varcheresti la finestra modale? Il metodo viewDidAppear della prima scheda? C'è un modo per avviare la finestra modale prima che le schede vengano caricate? –

+0

Se vuoi che venga mostrato prima che le cose vengano renderizzate, dovresti usare viewWillAppear per fare il check e lanciare la vista modale. Una volta aperto un nuovo controller di visualizzazione/visualizzazione in modo modale, l'elaborazione attende fino alla chiusura della vista modale. Il metodo sarebbe nel controller della vista principale del controller della scheda e non del controller della scheda. Se necessario, questo può essere inserito in ciascuno dei controller di visualizzazione radice del controllo struttura a schede oppure è possibile creare sottoclasse UIViewControl e utilizzarlo per ciascuno. – Rob

+1

Ho provato questo. Quello che vedo succedere è che la scheda iniziale viene caricata e quindi la finestra modale è sovrapposta sopra di essa. Visivamente questo non è piacevole. Vorrei che l'utente vedesse prima la finestra di login. Ho il lancio della vista di accesso eseguita dal metodo viewWillAppear nella prima scheda. Ecco come appare il mio codice.

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

0

Ho incontrato questo problema solo ora e mi hanno perfettamente risolto questo aggiungendo il codice seguente, che anche voi non è stata utilizzata.

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