for ios ios6 uiviewcontroller segue uistoryboardsegue

ios - for - override func prepare



¿Cómo ejecutar algún código después de un segue hecho? (5)

¿Es posible en iOS 6 saber cuándo un UIStoryboardSegue ha finalizado su transición? Al igual que cuando agrego un UIStoryboardSegue de UIButton para empujar otro UIViewController en el UIViewController de navegación, quiero hacer algo justo después de que finalice la transición de empuje.


En Swift, desde una subclase UIViewController puede obtener la instancia de UINavigationController y establecer el delegado, para estar informado sobre la finalización de los segmentos, como se muestra. Otro lugar lógico para rastrear segues podría ser el AppDelegate .

Ejemplo de hacerlo desde un controlador de vista (VC para abreviar):

class MyViewControllerSubclass : UIViewController, UINavigationControllerDelegate { func viewDidLoad() { self.navigationController.delegate = self } func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) { println("Did show VC: /(viewController)") } }

Pero eso solo te muestra cuando se completa la transición a la VC, como verían los métodos de delegado de viewWillAppear() o viewDidAppear() en la VC presentada; sin embargo, no informan sobre cuándo no se presenta el VC objetivo. También funcionará solo si su View Controller es parte de una pila de Navigation Controller.

En el VC que está rastreando, puede agregar lo siguiente para detectar cuándo el VC (y su memoria) están desasignados, o anular el método viewWillDisappear() .

deinit { println(__FUNCTION__, "/(self)") }


En caso de que no desee utilizar el método viewDidAppear: puede crear un segmento personalizado. En el método de perform , utilizarías una animación para la transición, y eso puede tener un bloque de finalización. Puede agregar el código allí después de que se complete la animación.


Puede usar - (void) prepareForSegue: (UIStoryboardSegue *) segue sender: (id) sender

Este método se llamará justo antes de que se realice una sesión en el origen UIViewController. Si desea hacer algún código en el controlador UIView de destino, puede obtener el controlador de vista de destino de segue.

También puede agregar este código en viewdidAppear en el controlador de vista viewint.


Puede usar el protocolo UINavigationControllerDelegate y luego definir:

– navigationController:didShowViewController:animated:


puede llamar a un método de destino UIViewController en el método prepareForSegue.

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { NSLog(@"prepareForSegue: %@", segue.identifier); if ([segue.identifier isEqualToString:@"Happy"]) { [segue.destinationViewController setHappiness:100]; } else if ([segue.identifier isEqualToString:@"Sad"]) { [segue.destinationViewController setHappiness:0]; } }

Aquí el método setHappiness es del controlador de destino y aquí el 100 está pasando allí. para que pueda escribir un método en el controlador de destino y llamarlo aquí