2012-05-15 19 views
5

¿Es posible anular el controlador de vista predeterminado de un guión gráfico para mostrar un controlador diferente en su lugar? Todo esto sucedería en AppDelegate, por supuesto.ios cambia el controlador de vista predeterminada del guión gráfico en tiempo de ejecución

+1

El ViewController predeterminado se declara en info.pList en los últimos SDK. ¿Se supone que debe verificar algo al inicio, y luego decidir qué control de vista presionar? – Martol1ni

+0

@ Martol1ni sí, lo que dijiste es exactamente lo que estoy buscando. – Jacksonkr

+0

¿Estás usando un UINavigationController? – Martol1ni

Respuesta

10

@ Martol1ni Quería usar su respuesta, pero también quería mantenerme alejado del desorden innecesario del guión gráfico, así que modifiqué un poco su código. Sin embargo, te di un +1 por tu inspiradora respuesta.

Puse todo lo siguiente en el controlador predeterminado.

- (void)gotoScreen:(NSString *)theScreen 
{ 
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:theScreen]; 
    [app.window setRootViewController:screen]; 
} 

Y luego, donde ocurre la lógica, llamaré a los siguientes según sea necesario.

if(myBool == YES) { 
    [self gotoScreen:@"theIdentifier"]; 
} 
5

Definitivamente incrustaré un rootView en un UINavigationController, por lo que no tiene dos, sino tres vistas. El uno nunca se lanza, solo tiene el control de todos los demás. A continuación, implemente los métodos de esta manera:

- (void) decideViewController { 
    NSString * result; 
    if (myBool) { 
     result = @"yourIdentifier"; 
    } 
    else { 
     result = @"yourOtherIdentifier"; 
    } 
    self.navigationController.navigationBarHidden = YES; // Assuming you don't want a navigationbar 
    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:@"view1ident"]; 
    [self.navigationController pushViewController:screen animated:NO]; // so it looks like it's the first view to get loaded 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self decideViewController]; 
} 

Nunca parece que se cargue la primera vista. Si está usando NIBS, puede hacer todo desde AppDelegate ...

Cuestiones relacionadas