Retour au premier ViewController du second ViewController

Je construis une application qui a actuellement 3 ViewControllers. L'un d'entre eux est utilisé après une connection réussie donc n'est pas pertinent dans cette question.

J'utilise un mélange de Storyboards et je construis des choses par programmation quand je trouve que les Storyboards ne me donnent pas le bon contrôle dont j'ai besoin.

Le premier ViewController est construit dans mon 'MainStoryboard'. Il a un formulaire de connection et un button d'information en bas. Je lier le mon AppDelegate en faisant ce qui suit à l'intérieur de didFinishLaunchingWithOptions :

ViewController *viewController = (ViewController *)self.window.rootViewController; 

Parce que je voulais forcer le rendu d'un UIWebView (une autre histoire), je crée la deuxième vue par programmation. Je fais ce qui suit à l'intérieur de didFinishLaunchingWithOptions :

 infoViewController = [[InfoViewController alloc] init]; [infoViewController view]; 

À l'intérieur de mes deux ViewControllers, je configure un lien vers appDelegate comme ci-dessous:

 appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

J'ai un button d'information dans mon premier ViewController qui vous amène à infoViewController. Il appelle le code suivant lorsqu'il est tapé:

 appDelegate.infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:appDelegate.infoViewController animated:YES]; 

Ce qui précède fonctionne très bien pour moi, returnne sur l'écran et montre le InfoViewController.

Sur mon InfoViewController, j'ai un button qui devrait vous ramener à la page de connection, j'ai essayé toutes sortes de choses pour que cela fonctionne, mais il bloque mon application. Rien ne semble fonctionner. J'ai essayé ce qui suit:

 appDelegate.viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:appDelegate.viewController animated:YES]; 

et

 [self.navigationController popToRootViewControllerAnimated:YES]; 

et

 [self.navigationController popViewControllerAnimated:YES]; 

et

 [self.navigationController popToViewController:appDelegate.viewController animated:YES]; 

Je soupçonne que les 3 derniers pourraient être plus à faire avec quand vous avez un controller de vue de navigation et vous voulez revenir à la racine? Je ne suis pas sûr, mais de toute façon ça ne marche pas. Je l'ai eu en utilisant des storyboards précédemment, donc je suis sûr que ça devrait être facile! Comme mentionné précédemment, je suis passé à la création d'infoViewController par programme afin que je puisse forcer le rendu UIWebView avant l'affichage de la vue.

Toute aide très appréciée.

Vous pouvez faire avec:

 [self dismissModalViewControllerAnimated:YES]; 

Vous devriez l'utiliser.

 [self dismissModalViewControllerAnimated:YES]; 

Vous devez utiliser un controller principal pour basculer entre vos autres controllers de vue. Changez la vue de votre controller de racine à l'un de vos autres controllers de vue (appliquez des animations comme d'habitude si nécessaire). Placez un pointeur sur votre controller racine dans les autres controllers de vue et appelez self.rootController.view = <desired_controller_instance>.view

Je pense que la façon dont vous présentez votre InfoViewController est fausse. Faites-le comme suit:

Dans votre ViewController, créez une action pour le button info .:

 - (IBAction)infoButtonTapped:(id)sender { InfoViewController *infoViewController = [[InfoViewController alloc] init]; infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:infoViewController animated:YES]; } 

Et dans votre InfoViewController, dans l'action de votre button qui devrait vous ramener, écrivez ceci:

 - (void)takeBackToViewController { [self dismissModalViewControllerAnimated:YES]; } 

Esperons que ça marche.

Aussi dans le controller présenté, vous pouvez utiliser cette

 if(self.parentViewController) [self.parentViewController dismissModalViewControllerAnimated:YES]; else [self.presentingViewController dismissModalViewControllerAnimated:YES]; 

Dissoudre le controller de courant.