¿Cómo llevar a cabo Unwind segue programmatically?

Usar el guión gráfico es muy fácil. Simplemente arrastre la acción a “Salir”. ¿Pero cómo debería llamarlo desde mi código?

  1. Cree un segue manual ( ctrl -drag del propietario del archivo para salir),
  2. Elija en el menú del controlador izquierdo debajo del botón verde EXIT.

Elija en el menú del controlador izquierdo debajo del botón verde EXIT

Introduzca el nombre de Segue para relajarse.

Luego, - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender. con tu identidad segue

Aquí hay una respuesta completa con Objective C y Swift:

1) Cree un segue de desenrollado de IBAction en su controlador de vista de destino (donde desea realizar la transición). En cualquier lugar en el archivo de implementación.

 // Objective C - (IBAction)unwindToContainerVC:(UIStoryboardSegue *)segue { } // Swift @IBAction func unwindToContainerVC(segue: UIStoryboardSegue) { } 

2) En el controlador de vista de origen (el controlador desde el que realiza la transición), ^ + arrastre desde “Nombre de actividad” para salir. Debería ver el segue de desenrollado creado en el paso 1 en la ventana emergente. (Si no lo ves, repasa el paso uno). Seleccione unwindToContainerVC: de la ventana emergente, o como sea que haya llamado su método para conectar su controlador fuente al IBAction desenrollado.

enter image description here

3) Seleccione la transición en el contorno del documento del controlador de la vista de origen del guión gráfico (aparecerá en la lista cerca de la parte inferior) y asígnele un identificador .

enter image description here

4) Llame a la transición de desenrollado utilizando este método desde el controlador de vista de fuente , sustituyendo su nombre de transición de desenrollado.

// C objective

[self performSegueWithIdentifier:@"unwindToContainerVC" sender:self];

// Swift

self.performSegueWithIdentifier("unwindToContainerVC", sender: self)

NÓTESE BIEN. Utilice la propiedad sourceViewController del parámetro segue en el método de desenrollado para acceder a las propiedades expuestas en el controlador de origen. Además, observe que el marco gestiona el descarte del controlador de origen. Si desea confirmar esto, agregue un método dealloc al controlador de origen con un mensaje de registro que se debe iniciar una vez que se haya eliminado. Si dealloc no se activa, es posible que tengas un ciclo de retención.

La respuesta de bradleygriffith fue genial. Tomé el paso 10 e hice una captura de pantalla para simplificar. Esta es una captura de pantalla en Xcode 6.

Simplemente mantenga presionada la tecla Control y arrastre desde el ícono naranja hasta el ícono rojo de Salir para crear un desenrollamiento sin acciones / botones en la vista.

enter image description here

A continuación, seleccione la unwind segue y configure algún identificador para acceder desde el código.

enter image description here

En codigo,

 [self performSegueWithIdentifier:@"unwindIdentifier" sender:self]; 

[self dismissViewControllerAnimated: YES completion: nil]; que lo devolverá al ViewController llamante.

Citando texto de la Nota técnica de Apple sobre Desenlace Segue: Para agregar un ciclo de desenrollado que solo se activará programáticamente, controle + arrastre desde el icono del controlador de vista de la escena a su icono de salida, luego seleccione una acción de desenrollado para el nuevo segue del menú emergente.

Enlace a la nota técnica

La respuesta de Vishal Chaudhry anterior funcionó para mí. También agregaría eso para activar manualmente la secuencia usando:

 [self performSegueWithIdentifier:@"mySegueName" sender:self]; 

desde dentro del ViewController también debe seleccionar el segund de desenrollado bajo la escena ViewController’s en el guión gráfico y en la vista de propiedades en el RHS asegúrese de que el campo Indentifier contenga el nombre al que se refiere en el código (“mySegueName” en el ejemplo anterior )

Si omite este paso, la línea anterior arrojará una excepción de que el nombre de la secuela no se conoce.

Solución compatible con versiones anteriores que funcionará para versiones anteriores a ios6, para aquellos interesados:

 - (void)unwindToViewControllerOfClass:(Class)vcClass animated:(BOOL)animated { for (int i=self.navigationController.viewControllers.count - 1; i >= 0; i--) { UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:i]; if ([vc isKindOfClass:vcClass]) { [self.navigationController popToViewController:vc animated:animated]; return; } } } 

FYI: Para que la respuesta de @Vadim funcione con una acción de secuencia de desenrollado manual llamada desde un controlador de vista, debe colocar el comando:

 [self performSegueWithIdentifier:(NSString*) identifier sender:(id) sender]; 

dentro del método de clase reemplazado viewDidAppear como tal:

 -(void) viewDidAppear:(BOOL) animated { [super viewDidAppear: animated]; [self performSegueWithIdentifier:@"SomeSegueIdentifier" sender:self]; } 

Si lo pones en otros métodos ViewController como viewDidLoad o viewWillAppear , se ignorará.