8

Soy bastante nuevo en la programación de iOS y estoy trabajando en una aplicación de iPad que tiene un controlador de barra de pestañas con 4 controladores de vista (llamados FirstViewController, SecondViewController, etc.) conectados a él. Actualmente, el controlador de la barra de pestañas está configurado para ser el punto de inicio predeterminado de la aplicación. Quiero poder autenticar al usuario antes de que lleguen a ese punto, así que agregué otro Controlador de Vista llamado LoginViewController que flota por sí mismo en el Guión Gráfico.Uso de presentModalViewController con guiones gráficos

Lo que quiero hacer es permitir que la aplicación se cargue y en finFinishLaunching, mostrar la página de inicio de sesión hasta que se complete la autenticación, luego desestimarla. He estado buscando por los últimos días, pero todo lo que he estado intentando ha fallado.

Mi intento más corriente era

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

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

loginVC.modalPresentationStyle = UIModalPresentationFullScreen; 

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

Cualquier ayuda sería muy apreciada. Se compila y se ejecuta, pero la vista no se muestra en absoluto y realmente me confundí sobre por qué está sucediendo esto.

Respuesta

12

El problema era que estaba tratando de crear una instancia como un UINavigationController, cuando en realidad era sólo una UIViewController. Llamar esto en la aplicaciónDidBecomeActive en la aplicaciónDelegate.m hizo el truco.

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

Debe llamar a "presentModalViewController" del viewController que se muestra actualmente, no la vista que se va a mostrar. Probablemente, algo como esto:

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

En Swift 2, esto es ahora:

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