Tengo un uinavigationcontroller. Después de registrado en quiero quitar viewcontrollers como RegisterViewController,LoginViewController etc de UInavigationcontroller pila..

Me refiero a que tengo que eliminar un determinado controlador de vista de la pila ? Cómo sea posible. ?

He comprobado este post

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

Así que podemos tomar en una matriz como

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers];

Pero cómo hacer el proceso más.. Esta pregunta es la caza de mí por mucho tiempo..por Favor me responda ..Gracias de antemano

InformationsquelleAutor S.P. | 2010-01-20

2 Comentarios

  1. 84
    NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers];
    [allViewControllers removeObjectIdenticalTo: removedViewController];
    navigationController.viewControllers = allViewControllers;
    • Gracias por responderme.Pero tengo duda en segundo sentance. LoginViewController * loginViewController = [LoginViewController alloc]; [allViewControllers removeObjectIdenticalTo: loginViewController]; Pero no funciono.. Pero cuando traté de [allViewControllers removeObjectAtIndex:0]; funcionó. Quiero algo como que respondió. también probé [allViewControllers removeObjectIdenticalTo: @»LoginViewController»]; Pero no trabajó. Por favor aclarar mí. Gracias …
    • Yo tenía algunas dudas acerca de cómo quitar el particular punto de vista..Y he puesto una pregunta para que y tiene la respuesta.. stackoverflow.com/questions/2100450/…
    • En algún lugar de su código que crea, es decir, la LoginViewController con +alloc y initWithNibName:paquete:. Que podría ser delegado de la aplicación, no sé cómo la aplicación está diseñada. De todos modos, de forma fiable quitar el controlador que usted tiene que mantener una referencia a él (por ejemplo, como un ivar en delegado de la aplicación). El «removedViewController» en el fragmento anterior es sólo que la de referencia. Sí que se puede recorrer la matriz de vista de los controladores buscando el controlador de una clase en particular. Pero, ¿y si un día vas a tener dos o tres de ellos como de extender su aplicación? Mis 2 centavos.
    • Entiendo que su método es la mejor manera de eliminar un viewcontroller de uinavigation de la pila. Soy muy nuevo en c objetivo. Tan confundido con «referencia a un objeto». He probado este .. [allViewControllers removeObjectIdenticalTo: myDelegate.nonLogginedViewController]; Donde en mi Appdelegate escribí @property (nonatomic, retener) NonLogginedViewController *nonLogginedViewController; y @sintetizar nonLogginedViewController; Es sólo needded para mantener una referencia a nonLogginedViewController ? Gracias de antemano..
    • Esto funciona, aunque es recomendable evitar hacerlo, mientras que las animaciones push o pop vista de los controladores están pasando. Usted va a obtener los registros como este: «Terminando de navegación de transición en un estado inesperado. Barra de navegación subvista árbol puede corromperse.»
    • Señor, muchas Gracias. es muy útil para mí… Gracias de nuevo .. 🙂
    • También estoy haciendo esto, pero es recibiendo un error como «el Acabado de una navegación de transición en un estado inesperado. Barra de navegación subvista árbol puede corromperse.»
    • La elaboración de @JohanKool comentario, usted debe evitar hacer esto, mientras que las animaciones están teniendo lugar. El más simple lugar para hacer esto es en viewDidAppear. Sin embargo, advirtió que este método puede ser llamado varias veces, así que usted debe tomar las medidas adecuadas para la seguridad y sólo quitar la vista controlador(s) una vez.
    • esto funciona hasta cierto punto. Los elementos de navegación de la pila no se vea afectado. Cuando se pulsa de nuevo, usted recibirá la vista de los controladores de tener el Título de las opiniones que se han eliminado de esta manera. Para evitar esto, sólo tiene que utilizar el pop y push (si es necesario, pop todo y empuje hacia atrás sólo lo que usted quiere, sin animación)

  2. 1

    Aquí está mi solución. Usted puede configurar la etiqueta o una propiedad fija a su viewcontrollers, entonces usted podría atravesar la uinavigationcontroller pila para buscar el destino viewcontroller(vcToRemove) y retírela. Esto podría ser más seguro. El código:

    NSInteger tag = vcToRemove.wvTag;
    NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers];
            int i = 1;
            for (i = 1; i <=[allViewControllers count]; i++) {
                UIViewController *vc = [allViewControllers objectAtIndex:i];
                if ([vc isKindOfClass:[MyWebViewController class]]) {
                    if (((MyWebViewController *)vc).wvTag == tag) {
                        [allViewControllers removeObjectAtIndex:i];
                        break;
                    }
                }
            }
    
            vcToRemove.navigationController.viewControllers = allViewControllers;

Dejar respuesta

Please enter your comment!
Please enter your name here