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.
Réponses
Trop de publicités?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)")
}
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.
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.