32 votes

Comment exécuter un code après la fin d'une séquence ?

Est-il possible, dans iOS 6, de savoir quand un UIStoryboardSegue a terminé sa transition ? Par exemple, lorsque j'ajoute un UIStoryboardSegue de UIButton pour en pousser un autre UIViewController Sur le contrôleur de navigation, je veux faire quelque chose juste après la fin de la transition de la poussée.

20voto

New Points 216

Vous pouvez utiliser le UINavigationControllerDelegate et de le définir :

– navigationController:didShowViewController:animated:

15voto

Levi Points 4536

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

8voto

binary star Points 81

Dans Swift, à partir d'un UIViewController vous pouvez obtenir la sous-classe 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 l'instance AppDelegate .

Exemple de réalisation à partir d'un contrôleur de vue (VC) :

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 s'affiche que lorsque la transition vers la CV est terminée, comme le ferait viewWillAppear() o viewDidAppear() les méthodes déléguées dans la CV présentée ; cependant, elles ne sont pas informées du moment où la CV cible est un -présenté. Cela ne fonctionnera également que si votre contrôleur de vue fait partie d'une pile de contrôleurs de navigation.

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

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

-10voto

ahmedalkaff Points 315

Vous pouvez utiliser - (void)prepareForSegue :(UIStoryboardSegue *)segue sender :(id)sender

Cette méthode sera appelée juste avant qu'une séquence ne soit exécutée dans le UIViewController source. Si vous voulez faire du code dans le UIViewController de destination, vous pouvez obtenir le viewcontroller de destination du segue.

Vous pouvez également ajouter ce code dans le viewdidAppear du viewController de la désintendance.

-11voto

Usman Ahmad Points 57

Vous pouvez appeler une méthode du UIViewController de destination dans la méthode 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];
  }
}

Ici, la méthode setHappiness est celle du contrôleur de destination et ici, 100 est transmis. Vous pouvez donc écrire une méthode dans le contrôleur de destination et l'appeler ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X