8

Sono abbastanza nuovo per la programmazione iOS e sto lavorando a un'app per iPad con un controller Tab Bar con 4 controller di visualizzazione (denominati FirstViewController, SecondViewController, ecc.). Attualmente il controller della barra delle schede è impostato per essere il punto di partenza predefinito dell'app. Voglio essere in grado di autenticare l'utente prima che raggiunga quel punto, quindi ho aggiunto un altro controller di visualizzazione chiamato LoginViewController che è mobile da solo nello Storyboard.Uso di presentModalViewController con gli storyboard

Quello che voglio fare è consentire all'applicazione di caricare e in didFinishLaunching, visualizzare la pagina di accesso fino al completamento dell'autenticazione, quindi chiuderla. Ho cercato negli ultimi due giorni, ma tutto quello che ho provato è fallito.

mio tentativo più corrente era

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 

UINavigationController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; 

loginVC.modalPresentationStyle = UIModalPresentationFullScreen; 

[self.window.rootViewController presentModalViewController:loginVC animated:YES]; 

Qualsiasi aiuto sarebbe apprezzato. Compila e corre, ma la vista non viene visualizzata e ho davvero confuso il motivo per cui questo sta accadendo.

risposta

12

Il problema era che stavo cercando di istanziare come un UINavigationController, quando in realtà era solo un UIViewController. Chiamarlo in applicationDidBecomeActive in appDelegate.m ha fatto il trucco.

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *loginVC = [storyboard instantiateViewControllerWithIdentifier:@"loginVC"]; 
loginVC.modalPresentationStyle = UIModalPresentationFullScreen;  
[self.window.rootViewController presentModalViewController:loginVC animated:YES]; 
2

È necessario chiamare "presentModalViewController" dal viewController attualmente visualizzato, non la vista che deve essere visualizzata. Probabilmente, qualcosa di simile:

[self.window.rootViewController presentModalViewController:loginVC animated:YES]; 
2

In Swift 2, questo è ora:

if let loginController: LoginViewController = mainStoryboard.instantiateViewControllerWithIdentifier("StoryboardControllerID") as? LoginViewController { 
    loginController.modalPresentationStyle = .FullScreen 
    self.window?.rootViewController?.presentViewController(loginController, animated: true, completion: {() -> Void in 
     // do stuff! 
    }) 
} 
Problemi correlati