iPhone-Sustitución de rootview en el controlador de navegación


Tengo un proyecto con un NavigationController, que contiene en IB el primer ViewController a mostrar. Ese es solo el patrón predeterminado al crear el proyecto.

En ese primer ViewController, recibo algún evento que envío a AppDelegate, y quiero que reemplace ese rootview con otro. No voy a la siguiente.

Así que lo hago:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void) goNext {

    [self.navigationController popViewControllerAnimated:NO];

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease];
    [self.navigationController pushViewController:nextWindow animated:NO];
}

Pero eso no funciona, el primer viewcontroller no aparece. Y el segundo se muestra lógicamente con un botón atrás.

Solo quiero reemplazar esa primera vista con la otra como el inicio del proceso de navegación.

Author: Oliver, 2011-07-16

2 answers

De UINavigationController referencia :

Este método (popViewController Animated:) elimina el controlador de la vista superior de la pila y hace la nueva parte superior de la pila el controlador de vista activo. Si la vista controlador en la parte superior de la pila es el controlador de vista raíz, este el método no hace nada. En otras palabras, no se puede hacer estallar el último elemento en pila.

Puede probar el método setViewControllers:animated: en su lugar.

- (void) goNext {

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease];
    [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES];
}
 82
Author: albertamg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-16 12:23:25

Si el controlador de vista en la parte superior de la pila es el controlador de vista raíz, popViewController Animated no hace nada. En otras palabras, no puede hacer estallar el último elemento en la pila.

Para reemplazar el controlador de vista raíz use este método:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
 17
Author: Felix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-16 12:17:01