Estoy usando IOS5 Guión gráfico. Mi punto de Vista Controlador de ruta de acceso es la siguiente:

tabbarVC --> navigationVC-1 --> tableVC-1 --(via segue push)-> tableVC-2 --(via segue modal)-> navigationVC-2 --> tableVC-3

En el botón cancelar de devolución de llamada de método de acción en tableVC-3 que yo llamo [self dismissViewControllerAnimated:YES completion:nil]; que el éxito me pone de nuevo a tableVC-2. Sin embargo cuando trato de examinar la ruta de navegación hacia atrás en el depurador, no veo una manera de acceder a tableVC-2 de navigationVC-2. Yo esperaba navigationVC-2 mantener un vínculo a tableVC-2 o navigationVC-1, pero no parece. Por favor, ver a mi salida del depurador de abajo.

Puede alguien explicar la jerarquía de navegación y cómo recorrer la cadena hacia atrás a través de programación?

(gdb) po self
<tableVC-3: 0x6d33340>

(gdb) po (UIViewController*) [self navigationController]
<UINavigationController: 0x6d33560>

(gdb) po (UIViewController*)[[self navigationController] navigationController]
Can't print the description of a NIL object.

(gdb) po (UIViewController*)[[self navigationController] topViewController]
<tableVC-3: 0x6d33340>

(gdb) po (UIViewController*)[[self navigationController] presentingViewController]
<UITabBarController: 0x6b2eba0>

(gdb) po (UIViewController*)[[self navigationController] presentedViewController]
Can't print the description of a NIL object.

(gdb) po (UIViewController*)[[self navigationController] visibleViewController]
<tableVC-3: 0x6d33340>

OriginalEl autor mpprdev | 2012-01-02

4 Comentarios

  1. 8

    Esta es una vieja cuestión, pero sólo para ayudar a cualquier persona que viene a través de este tema, hay un único comando que va a hacer su vida más fácil..

    [self.navigationController popToRootViewControllerAnimated:TRUE];

    Fácil cuando encuentres el derecho de comandos, no lo es !

    Así que, suponiendo que había una serie de tres pantallas en un Controlador de Navegación, y en el tercer pantalla que quería el botón «Atrás» para volver a la inicial pantalla.

    -(void)viewDidLoad
    {
        [super viewDidLoad];
    
        //change the back button and add an event handler
        self.navigationItem.leftBarButtonItem =
        [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                         style:UIBarButtonItemStyleBordered
                                        target:self
                                        action:@selector(handleBack:)];
    }
    
    
    -(void)handleBack:(id)sender
    {
        NSLog(@"About to go back to the first screen..");
        [self.navigationController popToRootViewControllerAnimated:TRUE];
    }

    OriginalEl autor Mike Gledhill

  2. 4

    Después de algunas investigaciones el uso de este y un par de preguntas para modal UIViewControllers en el guión gráfico para volver dos puntos de vista que he usado

    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    El comentario me hizo intentar [self.navigationController.navigationController popToRootViewControllerAnimated:YES];. La estructura fue como: Navegación Controlador -> formato tableview -> (a través de push segue) -> Controlador de Navegación -> Controlador de Vista. Este trabajó conmigo! Por otra parte, me dio una idea de cómo funcionan las cosas.

    OriginalEl autor Knightsy

  3. 4

    Va tirar una vieja respuesta resistente de la actualización de la misma para ser más completo.

    Para abordar esta cuestión :

    Puede alguien explicar la jerarquía de navegación y cómo recorrer la cadena hacia atrás a través de programación?

    La estructura de la navegación :

    tabbarVC –> navigationVC-1 –> tableVC-1 –(a través de la secuencia de inserción)-> tableVC-2 –(a través de transición modal)-> navigationVC-2 –> tableVC-3

    Se puede explicar así :

    El TabbarVC se muestra ‘selectedViewController’ (navigationVC-1).

    NavigationVC-1 tiene su pila de navegación componer de TableVC-1 y TableVC-2 (topViewController de NavigagtionVC-1)

    Luego NavigationVC-2 se presenta de forma Modal sobre la tabbarVC, así tabbarVC es el presentingViewController y NavigationVC-2 es el presentedViewController

    Así que para alcanzar tableVC-2 de tableVC-3 que necesita hacer algo como esto :

    [(UINavigationController *)[(UITabBarController *)[tableVC-3 presentingViewController] selectedViewController] topViewController];

    (no lo hagas en el código de producción)

    [tableVC-3 presentingViewController] así como [tableVC-3.navigationController presentingViewController] le va a devolver la UITabBarController.


    Si usted está usando un UINavigationController debe utilizar es push y pop método para poner UIViewController en o fuera de la «presentación de la pila».

    Usted será capaz de acceder a la UINavigationController de los UIViewController como este:

    self.navigationController

    Si quieres volver más de una UIViewController en la «presentación de la pila» puede utilizar este método en el UINavigationController

    popToViewController:animación:

    Cop vista de los controladores hasta la vista especificada controlador está en la parte superior de la pila de navegación.

    – (NSArray *)popToViewController:(UIViewController *)viewController animados:(BOOL)animadas


    Despedir a un UIViewController que fue presentado de forma modal, la UIViewController que se han presentado se necesita para descartarla con :

    - (void)dismissModalViewControllerAnimated:(BOOL)animated

    Por lo que en este caso sería :

    [tableVC-2 dismissModalViewControllerAnimated:YES];
    En realidad mi pregunta es diferente. Aviso que tengo 2 controladores de navegación en el juego. Mi pregunta es cómo volver a la primera navegación del controlador. Si usted ve la salida de depuración me pega, no parece haber ninguna manera de atravesar volver a la primera navegación del controlador.
    gracias por los comentarios. Sin el 2do nav controlador, el ‘modal’ tipo segue parece que no funciona (aplicación se bloquea).
    Ok lo entiendo, estoy menos uso a pasar. No quieres volver que quieres despedir a tu modal presentación.
    No enlaza con la pregunta, pero gracias, he estado buscando por el pop función por un tiempo, pero no había encontrado el controlador de navegación (estaba buscando en el controlador principal… Ahora todo tiene cense
    Una pequeña observación: si desea volver a la vista anterior, sin que se pasa como parámetro, puedes usar el siguiente código: [[auto navigationController] popViewControllerAnimated:YES];

    OriginalEl autor Vincent Bernier

  4. 0

    Swift

    Si usted está utilizando un controlador de navegación la puede volver a la vista anterior del controlador con

    self.navigationController?.popViewControllerAnimated(true)

    o de vuelta a la raíz de controlador de vista con

    self.navigationController?.popToRootViewControllerAnimated(true)

    OriginalEl autor Suragch

Dejar respuesta

Please enter your comment!
Please enter your name here