J'ai un problème avec la méthode dismissViewControllerAnimated
ne ferme pas la vue.
Ce qui se passe dans l'application ici est:
ItemViewController
est sélectionnée. ItemDetailViewController
à ItemDetailViewController
et les détails sont envoyés via un délégué ItemViewController
Tout cela fonctionne sauf pour la vue n'est pas rejetée, il n'y a pas d'erreurs. Quelqu'un peut-il voir ce qui ne va pas?
- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller { NSLog(@"Controller: %@", controller); // Returns - Controller: <ItemDetailViewController: 0x6b68b60> [self dismissViewControllerAnimated:YES completion:nil]; }
Que faire si vous appelez [controller.navigationController popViewControllerAnimated:YES]
place?
D'ailleurs, que faire si vous appelez [controller dismissViewControllerAnimated:YES completion:nil]
au lieu de l'appeler soi-même?
La réponse est dans cette page: dismissviewcontrolleranimated-vs-popviewcontrolleranimated
dismissViewController est utilisé lorsque vous n'avez pas de controleur de navigation. Vous utilisez très probablement un controller de navigation, puis utilisez à la place self.navigationController popViewController.
Prenez également note de lemax sa remarque: utilisez NULL, pas nill pour le gestionnaire de complétion
J'ai eu un problème dans iOS5 où le callback d'achèvement standard ne permettait pas à la vue d'être complètement ignorée (seulement la vue poussée actuelle de ce modal)
[controller dismissViewControllerAnimated:YES completion:^ { // }];
Solution pour iOS5 est de ne pas avoir un callback:
[controller dismissViewControllerAnimated:YES completion:nil];
Avait un problème où appeler dismissViewControllerAnimated
rejeté le keyboard dans un UIViewController, mais pas la vue elle-même.
Résolu en utilisant deux appels:
[self dismissViewControllerAnimated:NO completion:nil]; [self dismissViewControllerAnimated:YES completion:nil];
un instant pour le keyboard, puis un animé pour le controller
Votre situation est – ItemViewController -> ItemDetailViewController (poussé sur navigationController) Self.dismissViewController (..) rejeter un controller de vue qui est présenté sur soi (dans le cas où il est ItemViewController). Ici, vous n'avez présenté aucun VC sur soi-même, à la place vous avez poussé un nouveau VC sur la stack de navigation. Donc, façon correcte de rejeter ItemDetailViewController serait
self.navigationController.popViewController (true). Veuillez lire la description de dismissViewController (….) pour plus de clarté.