Masquer tous les contrôleurs de vue modale
j'ai une connexion de vue présenté comme un ModelViewController et j'ai un registre de vue présenté comme un NavigationControlloer sur le dessus de celui-ci:
De Connexion (ModelViewController)
---->Register(NavigationController)
je vais présenter le Registre de la vue(CreateAccount) à la Loginview comme suit:
createAccount= [[CreateAccount alloc] initWithNibName:@"CreateAccount" bundle:nil];
navController = [[UINavigationController alloc] initWithRootViewController:createAccount];
UIBarButtonItem *cancelButtun=[[UIBarButtonItem alloc]initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(HideMe)];
UIBarButtonItem *registerButtun=[[UIBarButtonItem alloc]initWithTitle:@"Register" style:UIBarButtonItemStyleBordered target:self action:@selector(Register)];
createAccount.navigationItem.leftBarButtonItem = cancelButtun;
createAccount.navigationItem.rightBarButtonItem=registerButtun;
createAccount.title=@"Create Account";
[self presentModalViewController:navController animated:YES];
la connexion du contrôleur a la NSURLConnectionDelegate d'un stand, le login et le registre.
lors de l'enregistrement terminera j'ai simplement appeler la
[self dismissModalViewControllerAnimated:YES];
qui rejette l'enregistrement uniquement dans la vue.
je veux rejeter la connexion de point de vue, donc je peux retourner à mon application principale.
source d'informationauteur Kassem
Vous devez vous connecter pour publier un commentaire.
Découvrez ma réponse à une question similaire ici: Rejetant ModalViewController de ModalViewController
Je suis en utilisant à peu près la même chose que vous, dans mon application, et cette solution a fonctionne pour moi. Veuillez vous assurer de lire les commentaires ainsi, depuis l'une des références changé avec iOS5.
Edit:
Pour rejeter un modal de la vue qui vous est présenté sur un autre modal de la vue, vous devez appeler dismissModalViewControllerAnimated: sur le parent du parent.
iOS <5.0
iOS 5.0+ (doit changer toutes les références à parentViewController à presentingViewController)
Appel
dismissModalViewController
sera, si le point de vue actuel contrôleur ne présente pas de modal contrôleurs, appelez la méthode sur son parent à la place. L'appel de la méthode sur une vue contrôleur de rejeter le tout présenté modal-vue-contrôleur à ce contrôleur. Pour illustrer:Si vous avez trois contrôleurs de vue: vc1, vc2 et vc3 et vc1 est le principal/actuellement utilisé-vue-contrôleur.
En vc1 vous présenter modal vc2. Dans vc2 vous appelez ensuite la rejeter, car il n'y a pas modale vcs présenté de vc2, l'avis de rejeter le message est transmis à la société mère (vc1), qui rejette vc2, et vous êtes de retour à vc1.
En vc1 vous présenter modal vc2, puis à partir de vc2 présent modal vc3. L'appel de rejeter dans vc3 enverra le message à son parent (vc2) qui rejette vc3. Pour rejeter vc2 et vc3 dans le même temps, vous devez appeler les rejeter dans le vc1, cela permettra de faire disparaître toutes les (deux) modal vue des contrôleurs. Si rejetant animé, seul le premier sera animé.
L'une des meilleures façons de résoudre ce problème est d'utiliser une manette de navigation. c'est à dire au lieu d'utiliser modalViews d'abord de présenter de connexion view, utilisez
navigationViewcontroller
il lui-même. Si vous avez besoin de présenter la page d'enregistrement. Pousser la vue. Si vous avez besoin de goto la vue initiale (c'est à dire en dehors de loginView ou registrationView), puis utilisezpopToRootViewControllerAnimated
méthode dansnavigationViewcontroller
.Le principal problème est que la connexion view controller est complètement inconscients lors de l'enregistrement de la vue est rejeté, et l'on peut gérer qu'avec la délégation.
D'abord déclarer un protocole et d'un délégué de la propriété sur inscription-vue-contrôleur.
Ensuite, effectuez la connexion view controller le délégué de l'enregistrement du contrôleur.
Et de mettre en œuvre
-createAccountViewControllerDidFinish:
Enfin, lorsque vous rejeter de l'intérieur le contrôleur de l'enregistrement, message le délégué de l'informer si votre licenciement imminent.
Maintenantaprès avoir dit tout cela. Puis-je suggérer une modification à votre conception? Je voudrais présenter la connexion view controller dans le cadre d'une manette de navigation de l'aller. Ensuite, si l'utilisateur choisit de s'inscrire, il suffit de pousser l'enregistrement, vue sur le contrôleur. De cette façon, n'importe où vous rejeter, il n'aura qu'à faire disparaître la barre de navigation principale du contrôleur.
dismissModalViewControllerAnimated:
rejette tous modal vue contrôleurs présenté sur le dessus de l'expéditeur. Pour les rejeter en arrière à la vue du contrôleur qui a présenté la connexion du contrôleur, de conserver une référence à elle et à rejeter comme suit:Ce est la force brute façon de faire. Dans mon application, où j'ai fait quelque chose de similaire, je post différentes notifications correspondant à la session (par exemple login) de l'état et de mon login contrôleur observe ces notifications et rejette lui-même de manière appropriée.
Place de cette méthode dans votre délégué d'application et il va supprimer tous les contrôleurs de vue qui ont un presentedViewController ce qui signifie qu'ils ont été présentés sous forme modale
Faire disparaître toutes les manettes, à l'exception RootViewController..
Travaillé pour faire disparaître toutes dans iOS 7