Mostrando una pantalla de inicio de session como una vista modal.

Estoy desarrollando una aplicación que se puede usar sin iniciar session de inmediato, pero ciertas tabs requieren inicio de session. Entonces, quiero que mi vista de inicio de session se deslice cada vez que se abren esas tabs. Si el usuario golpea el button Cancelar en la vista de inicio de session, la window modal se debe descartar y debe volver a la misma vista que tenía el usuario anterior. Si el inicio de session es exitoso, la window debe ser descartada y la pestaña debe cargarse. ¿Cuál es la mejor manera de implementar esto? ¿Debo hacer un controller de barra de tabs personalizado?

EDITAR: Tomé el enfoque de Caffeine. Esto parece funcionar para mí:

// App delegate #pragma mark - UITabBarController delegate - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { if ([[viewController topViewController] loginRequinetworking]) { LoginViewController *loginViewController = [[LoginViewController alloc] init]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:loginViewController]; [tabBarController presentModalViewController:navController animated:YES]; [loginViewController release]; [navController release]; return NO; } else { return YES; } } 

Puede intentar implementar el tabBarController:shouldSelectViewController de UITabBarControllerDelegate . Presente el controller de inicio de session modal desde dentro de ese método de delegado y si es exitoso, devuelva SÍ, de lo contrario NO.

Simplemente puede utilizar los methods de delegado TabBarController para detectar cambios en las tabs y, a continuación, almacenar el índice seleccionado para su uso posterior.

  1. Haga que su tabBarController sea su rootViewController .

  2. Crear class y ver para su LoginController .

  3. En la primera pestaña que se lanzaría (o la pestaña que requeriría una vista modal) vaya al método viewDidLoad y haga reference a LoginViewController y use

      LoginController *lvc = [[LoginController alloc]initWithNibName:@"LoginController" bundle:[NSBundle mainBundle]]; UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:LoginController]; [self presentModalViewController:navController animated:NO]; // This gives navigation control to the login controller // 
  4. Si el inicio de session es exitoso, puede hacer [self dismissModalViewControllerAnimated:YES];

  5. Si el inicio de session no se realiza correctamente, puede navegar vaya a ForgotLoginController para recuperar la contraseña o simplemente popToRootViewController y volver a la pantalla anterior o popToRootViewController a la primera vista en la stack de navigation y permanecer en las opciones de inicio de session.