Comment exécuter du code après la fin d'une session?

Est-il possible dans iOS 6 de savoir quand un UIStoryboardSegue a terminé sa transition? Comme quand j'ajoute un UIStoryboardSegue de UIButton pour pousser un autre UIViewController sur le UIViewController de navigation, je veux quelque chose juste après que la transition push soit terminée.

Vous pouvez utiliser le protocole UINavigationControllerDelegate , puis définir:

 – navigationController:didShowViewController:animated: 

Dans le cas où vous ne souhaitez pas utiliser la méthode viewDidAppear: vous pouvez créer un segment personnalisé. Dans la méthode d' perform , vous utiliseriez une animation pour la transition, qui peut avoir un bloc d'achèvement. Vous pouvez y append le code une fois l'animation terminée.

Dans Swift, à partir d'une sous-class UIViewController vous pouvez get l'instance UINavigationController et définir le délégué, afin d'être informé de l'achèvement des segues, comme indiqué. Un autre endroit logique pour suivre les segues pourrait être l' AppDelegate .

Exemple de faire à partir d'un controller de vue (VC pour faire court):

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

Mais cela ne vous montre que lorsque la connection au VC est terminée, tout comme viewWillAppear() ou viewDidAppear() déléguer des methods dans le VC présenté; Cependant, ils n'indiquent pas quand le VC cible n'est pas représenté.

Dans le VC que vous suivez, vous pouvez append ce qui suit pour détecter quand le VC (et sa memory) sont désalloués, ou replace la méthode viewWillDisappear() .

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

Vous pouvez utiliser – (void) prepareForSegue: (UIStoryboardSegue *) sgue expéditeur: (id) expéditeur

Cette méthode sera appelée juste avant qu'un segue soit effectué dans le UIViewController source. Si vous voulez faire du code dans le UIViewController de destination, vous pouvez get le viewcontroller de destination de segue.

Vous pouvez également append ce code dans viewdidAppear dans le viewController de desintation.

vous pouvez appeler une méthode de destination UIViewController dans la méthode prepareForSegue.

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

Ici la méthode setHappiness est de destination Controller et ici 100 passe ici. de sorte que vous pouvez écrire une méthode dans le controller de destination et l'appeler ici