2012-01-27 23 views
7

Tengo una aplicación ios5 desarrollada usando guiones gráficos que actualmente muestra una vista del controlador de la barra de pestañas en el inicio inicial. Me gustaría mostrar una pantalla de inicio de sesión antes de que se muestre el controlador de la barra de pestañas. El usuario ingresará su contraseña de nombre de usuario &, el sistema autenticará al usuario y luego, si tiene éxito, mostrará el controlador de la barra de pestañas.Iniciar una vista de inicio de sesión antes de que se muestre el controlador de la barra de pestañas

He intentado las siguientes 3 opciones sin suerte ... alguna 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; 
} 

Respuesta

18

finalmente descubrió éste hacia fuera .. Esto es lo que tiene que hacer:

  1. Añadir un punto de vista de acceso independiente al guión gráfico.

  2. Seleccione la vista de inicio de sesión y en el inspector de atributos, verifique 'Es el controlador de vista inicial'. Esto cambiará la vista inicial que se inicia desde el controlador de pestañas a la vista de inicio de sesión, con lo que se soluciona todo el problema de mostrar primero la pantalla de inicio de sesión.

  3. Agregue un botón a la vista de inicio de sesión y cree una secuencia para cargar el controlador de pestañas con solo presionar el botón. (O puede crear una transición desde la vista de inicio de sesión a la vista del controlador de pestañas e invocar programáticamente la segue según sea necesario).

  4. seleccionar la vista de inicio de sesión y seleccione la opción Editor> Insertar En> Navigation Controller

  5. En el inspector de atributos para el control de navegación, desactive la opción (esto es un cambio cosmético 'barra de navegación Muestra', yo soy suponiendo que usted no necesita una barra de navegación que muestra en la pantalla de inicio de sesión !!)

Eso es todo :)

+0

¿cómo paso el valor al firstviewcontroller de la barra de pestañas usando segue? No pude hacer que funcione – meda

+0

No pasa un valor con el cambio. Una posible opción es almacenar el valor que desea pasar como una propiedad en su AppDelegate y simplemente acceder al valor de la vista de destino. –

+0

¡Funciona! Pero, ¿cómo desactivar la opción de nueva ventana si la contraseña es incorrecta? – Gank

0

Puede usar una vista modal. Puede verificar si el usuario está conectado. De lo contrario, puede usar una vista modal para obtener la información de inicio de sesión. Puede crear un UIViewController en el guión gráfico y luego usar el método instantiateViewControllerWithIdentifier: para crear la pantalla de inicio de sesión desde el guión gráfico. Entonces simplemente muéstralo modalmente.

+0

¿Y desde dónde lanzaría la ventana modal? ¿El método viewDidAppear de la primera pestaña? ¿Hay alguna manera de abrir la ventana modal antes de que se carguen las pestañas? –

+0

Si desea que se muestre antes de que se muestren las cosas, entonces usaría la vista Mostrar para hacer la comprobación e iniciar la vista modal. Una vez que abre modalmente una nueva vista controlador/vista, el procesamiento espera hasta que se cierre la vista modal. El método estaría en el controlador de vista raíz del controlador de pestañas y no en el controlador de pestañas. Si es necesario, esto se puede colocar en cada uno de los controladores de vista raíz del control de pestañas o puede subclase UIViewControl y usarlo para cada uno. – Rob

+1

Intenté esto. Lo que veo que sucede es que la pestaña inicial se carga y luego la ventana modal se superpone en la parte superior. Visualmente esto no es agradable. Me gustaría que el usuario vea primero la ventana de inicio de sesión. Tengo el lanzamiento de la vista de inicio de sesión que se realiza desde el método viewWillAppear en la primera pestaña. Así es como se ve mi código.

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

0

me encontré con este problema en este momento y que han resuelto perfectamente esto añadiendo el siguiente código, que también no ha utilizado.

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