J'ai un UITableViewController qui, lorsqu'on appuie sur une cellule, doit s'ouvrir, puis le contrôleur vers lequel il s'ouvre doit pousser un autre contrôleur de vue sur la pile.
J'invoque cette méthode parce que le popped-to viewController est le délégué du tableViewController.
Je suis actuellement en train d'invoquer cette méthode avec un délai, parce que sinon, tout s'embrouille en attendant la fin de l'animation. Cette façon de faire me semble un peu compliquée et j'ai l'impression qu'elle échouerait si l'appareil de quelqu'un n'ouvrait pas la vue dans le temps d'attente que je lui ai donné.
Voici une partie du code :
//**** code in my tableViewController ***//
[self.navigationController popViewControllerAnimated:YES];
[self.delegate cellPressedInTableViewControllerWithCalculationsModel:(id)anArgmentMyDelegateMethodTakes];
// **** Code in the viewController being popped to ****//
//CalculationsViewController is a subclass of UIViewController
CalculationsViewController *calcViewController = [[CalculationsViewController alloc] init];
//some customization code would go her
[self.navigationController performSelector:@selector(pushViewController:animated:) withObject:calcViewController afterDelay:0.75];
//this seems like the arbitrary part, the 0.75 second delay.
[calcViewController release];
Il semble qu'il devrait y avoir un meilleur moyen de faire passer une délégation qui s'exécutera après la fin de l'animation. Le temps d'attente me semble pouvoir causer des problèmes inattendus.
J'ai également essayé d'utiliser :
performSelectorOnMainThread:withObject:waitUntilDone
Mais le code s'exécute immédiatement et la hiérarchie de la vue est foutue.
Je me suis également penché sur cette question : Question de délégation et cela m'a permis d'aller jusqu'ici, mais je suis curieux de savoir s'il existe une meilleure façon d'effectuer une telle tâche, Merci.
edit : J'ai également essayé d'envelopper la méthode dans une instance de NSInvocation, et je n'ai pas réussi à coordonner l'appel de la méthode jusqu'à la fin de l'animation sans régler arbitrairement le délai.