11
votes

licenciementViewControléranimated ne fonctionne pas dans un bloc

J'essaie de fermer un UIViewController code> après un UIAlertController code> a été montré

Ceci est mon code:. P>

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title 
                                                                         message:msg
                                                                  preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"Accept" 
                                                   style:UIAlertActionStyleDefault 
                                                 handler:^(UIAlertAction *action)
             {
                 [self dismissViewControllerAnimated:YES completion:nil];
             }];

[alertController addAction:okAction];
[self presentViewController:alertController animated:YES completion:^{}];


0 commentaires

4 Réponses :


5
votes

[SelfissViewControléranimated: Oui Achèvement: NIL] Code> fermera tous les contrôleurs de vue que la vue affichage actuellement em> (c'est-à-dire "(auto") affiche. Ce que vous voulez faire, c'est exécuter cette même méthode sur le contrôleur em> présage em> pour "Self". I.e.

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];


6 commentaires

Mais auto (l'actuel UIViewController) est la vue que je veux renvoyer. J'ai essayé d'ajouter .parentviewcontroller, ça ne fait aucune différence.


Oui, exactement. Vous voulez rejeter "Self". "Self.presentViewController" pourrait le faire. Mise à jour de la réponse.


Dans le débogueur, sont à la fois "Self.presentViewController" et "Self.ParentViewController" Nil?


Non, self.parentviewController est de type xxxrootnavigationcontroller


Que diriez-vous de Self.PresententingViewController ?


Self.PresentViewController est nul



2
votes

Avez-vous vérifié sur quel fil le bloc est appelé? Si ce n'est pas le fil 1, il ne rejetera pas votre point de vue correctement, car la manipulation de l'utilisateur ne peut être effectuée que sur le fil un. Essayez de créer une méthode de licenciement, puis de l'appeler sur le thread principal: xxx


1 commentaires

Oui, essayé, ça n'a pas fonctionné. BTW, le sélecteur le plus court est PerformSelectorOnmainthread: withObject: WatintTone:



8
votes

au cas où quelqu'un a eu le même problème. J'ai poussé le uiviewcontroller , je ne l'ai pas présent avec PresentViewController: animé: Achèvement: . C'est pourquoi [autoavigationController PopViefControléranimated: oui]; doit être utilisé à la place.

L'étrange chose est que [auto démissionnantControléranaméranimated: oui achèvement: nil]; travaillé à l'extérieur du bloc et n'a pas à l'intérieur, je n'ai aucune explication pour cela ...


0 commentaires

12
votes

Il suffit d'utiliser [Super.navigationController PopViewControléranimated: Oui];


1 commentaires

Oui ... c'est ce que j'ai écrit 4 mois plus tôt: D