web-dev-qa-db-fra.com

Comment exécuter du code une fois la séquence terminée?

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

31
bogen

Vous pouvez utiliser le protocole UINavigationControllerDelegate puis définir:

– navigationController:didShowViewController:animated:
20
New

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

15
Levi

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

Exemple de le faire à partir d'un contrôleur 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 transition vers le VC est terminée, comme le feraient les méthodes déléguées viewWillAppear() ou viewDidAppear() dans le VC étant présenté; cependant, ils n'informent pas quand la cible VC est n - présentée. Cela ne fonctionnera également que si votre View Controller est partie d'une pile de contrôleur de navigation.

Dans le VC que vous suivez, vous pouvez ajouter ce qui suit pour détecter quand les VC (et sa mémoire) sont désalloués ou remplacer la fonction viewWillDisappear() méthode.

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