Ouverture de modale depuis une méthode delegate
Salut,
Petite colle du soir. ???
J'appelle une méthode delegate depuis un view controller déjà ouvert sous forme de de modale.
Donc j'appelle ma méthode et je ferme la modale en cours.
Or, la modale se ferme bien, la méthode delegate est bien appelée (j'ai fait du ligne à ligne dans le débugueur), tous les objets sont instanciés... mais rien ne se passe: dans cette méthode delegate, je veux ouvrir une autre modale.
Donc lorsque je passe la ligne presentModaleViewController, rien ne se passe...
Je sèche un peu, d'autant que je suis presque sûr d'avoir déjà appelé une ouverture de modale au controller parent juste avant de fermer la modale déjà ouverte.
Donc pour l'instant, la modale en cours est fermée, et rien d'autre ne se passe.
Petite colle du soir. ???
J'appelle une méthode delegate depuis un view controller déjà ouvert sous forme de de modale.
- (IBAction)wantToAddBottles:(id)sender<br />{ <br /> [self.finderDelegate loadBottleViewControllerWithBottleUUID:nil forWineUUID:self.wine.uuid];<br /> [self dismissModalViewControllerAnimated:YES];<br />}
Donc j'appelle ma méthode et je ferme la modale en cours.
Or, la modale se ferme bien, la méthode delegate est bien appelée (j'ai fait du ligne à ligne dans le débugueur), tous les objets sont instanciés... mais rien ne se passe: dans cette méthode delegate, je veux ouvrir une autre modale.
- (void)loadBottleViewControllerWithBottleUUID:(NSString*)bottleUUID forWineUUID:(NSString*)wineUUID<br />{<br /> Bottle *bottle = nil;<br /> <br />...<br /> <br /> BottleViewController *bottleViewController = [[BottleViewController alloc] initWithNibName:[NSString stringWithFormat:@"%@~%@", @"BottleViewController", DEVICE] bundle:nil];<br /> bottleViewController.finderDelegate = self;<br /> bottleViewController.bottle = bottle; <br />#ifdef TARGET_OS_PAD<br /> bottleViewController.modalPresentationStyle = UIModalPresentationPageSheet;<br /> [self presentModalViewController:bottleViewController animated:YES]; <br />#endif <br /> [bottleViewController release]; <br />}<br />
Donc lorsque je passe la ligne presentModaleViewController, rien ne se passe...
Je sèche un peu, d'autant que je suis presque sûr d'avoir déjà appelé une ouverture de modale au controller parent juste avant de fermer la modale déjà ouverte.
Donc pour l'instant, la modale en cours est fermée, et rien d'autre ne se passe.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En tout cas dans ce genre de cas, il faut peut-être revoir ton pattern.
Tu te doutes que j'ai essayé...
J'ai aussi essayé avec le dismiss avant.
J'y ai longuement réfléchi, et pour mon cas je trouvais que ce choix était logique.
J'ouvre la deuxième modale sans fermer la première.
J'avais souhaité fermer la première parce que depuis le premier écran on ouvre également la "deuxième modale" en mode édition, et ce directement. Donc je voulais tout mettre sur le même plan. Qu'une fenêtre puisse être ouverte uniquement du même endroit.
Mais bon, bien que changeant d'avis, si quelqu'un a une idée de savoir pourquoi rien ne se passait dans le cas 1), qu'il se manifeste.
Bha je te l'ai expliqué ???
C'est vraiment pas nouveau qu'on ne puisse pas enchaà®ner un dismissModalAnimated:YES + presentModalAnimated:YES. J'avais le même problème sous iOS 3 (voir avant!)
Après, j'ai bien envie de dire que c'est un bug de la part d'Apple..
En effet, je ne trouve aucune raison logique pour que ça ne marche pas.
La seule raison logique c'est que totoController.modalViewController existe encore au moment où tu appelles ton presentModalViewController:animated:
Le problème c'est qu'Apple aurait du gérer un système de cached-view au moment où on appelle dismissModalViewControllerAnimated: et immédiatement mettre xx.modalViewController à nil.
Je délai de 0.5 seconde semble être un minimum... donc ça reste bancal.
Depuis la première modale ouverte, utiliser la méthode viewDidDisappear, et une ivar en plus:
ça marche nikel, et c'est moins bricolo.
Je ne l'avais pas encore expérimenté.