J'ai un problème avec la méthode dismissViewControllerAnimated
qui ne ferme pas la vue.
Ce qui se passe dans l'application ici est:
ItemViewController
est sélectionnée.ItemDetailViewController
et les détails sont envoyés par un déléguéItemViewController
Tout cela fonctionne sauf que la vue n'est pas rejetée, il n'y a pas d'erreur. 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]
à la place?
D'ailleurs, si vous appelez [controller dismissViewControllerAnimated:YES completion:nil]
au lieu de l'appeler vous-même?
La réponse se trouve dans cette page: licenciementviewcontrolleranimated-vs-popviewcontrolleranimated
licenciementViewController est utilisé lorsque vous n’avez pas de contrôleur de navigation . Vous utilisez probablement un contrôleur de navigation, puis utilisez self.navigationController popViewController à la place.
Prenez également note de la remarque de lemax: utilisez NULL, pas nill pour le programme d'achèvement
Il y avait un problème où appeler dismissViewControllerAnimated
renvoyait le clavier d'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 clavier, puis un animé pour le contrôleur
J'ai eu un problème dans iOS5 où le rappel d'achèvement standard ne permettait pas à la vue d'être complètement ignorée (seule la vue actuelle en cours de ce modal)
[controller dismissViewControllerAnimated:YES completion:^ {
//
}];
Solution pour iOS5 est de ne pas avoir de rappel:
[controller dismissViewControllerAnimated:YES completion:nil];
Votre situation est - ItemViewController -> ItemDetailViewController (poussé sur navigationController) Self.dismissViewController (..) rejette un contrôleur de vue présenté sur soi (dans le cas où il s’agit de ItemViewController). Ici, vous n'avez pas présenté de VC sur vous-même, mais vous avez poussé un nouveau VC sur la pile de navigation. Ainsi, le moyen correct de rejeter ItemDetailViewController serait
self.navigationController.popViewController (true). veuillez lire la description de licencierViewController (....) pour plus de clarté.