Esta no es la forma correcta, llamar init
en un objeto ya inicializado rara vez (creo que nunca) es.
La forma en que resolvió este problema es crear una subclase de UINavigationController.
En la presente subclase, i sobrescribir el initwithrootviewcontroller:
- (id) initWithRootViewController:(UIViewController *)rootViewController
{
UIViewController *fakeController = [[[UIViewController alloc] init] autorelease];
self = [super initWithRootViewController:fakeController];
if(self)
{
self.fakeRootViewController = fakeController;
rootViewController.navigationItem.hidesBackButton = YES;
[self pushViewController:rootViewController animated:NO];
}
return self;
}
El fakeRootViewController en realidad no hace nada, es una solución para iOS no tener la posibilidad de establecer el RootViewController.
En otra función (setRootViewController: aViewController), oculta el botón back del nuevo 'rootviewcontroller' para que el usuario nunca vea que hay un controlador de vista de falsa. y luego empujarlo por encima de la fakerootviewcontroller
El poptorootviewcontroller debe sobrescribir para asegurarse de que siempre aparece en el índice 1 de la pila, no índice 0.
El getter de viewcontrollers debe ser cambiado por lo que devuelve una matriz sin el fakerootviewcontroller (removeobjectatindex: 0
)
Espero que esto ayude!
Gracias Costique! Está funcionando. ¿Puede explicar cómo funciona setViewController? –
Ambos métodos reemplazan toda la pila del controlador de vista dentro del controlador de navegación. Los "viejos" controladores son liberados. La matriz de pila comienza con el controlador raíz y su último elemento es el controlador de vista superior. – Costique
@Costique ¿Cómo puedo establecer Root ... supongo que tengo que cambiar la raíz 3 veces, entonces este método funciona de manera eficiente o no? – Dalvik