web-dev-qa-db-fra.com

Comment changer de vue par programme dans un contrôleur de vue? (Xcode, iPhone)

Cela fait un moment que je lutte contre cela et je n'arrive jamais à obtenir une réponse directe.

Toute aide est appréciée!

42
mishajw126

Si vous êtes dans un contrôleur de navigation:

ViewController *viewController = [[ViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];

ou si vous voulez juste présenter une nouvelle vue:

ViewController *viewController = [[ViewController alloc] init];    
[self presentViewController:viewController animated:YES completion:nil];
86
SlateEntropy

Si vous souhaitez présenter une nouvelle vue dans le même storyboard,

Dans CurrentViewController.m,

#import "YourViewController.h"

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
YourViewController *viewController = (YourViewController *)[storyboard instantiateViewControllerWithIdentifier:@"YourViewControllerIdentifier"];
[self presentViewController:viewController animated:YES completion:nil];

Pour ouvrir l'identificateur à un contrôleur de vue, Ouvrez MainStoryBoard.storyboard . Sélectionnez YourViewController View-> Utilities -> ShowIdentityInspector . Vous pouvez y spécifier l'identificateur.

33
sree_achu

La instantiateViewControllerWithIdentifier est le Storyboard ID.

NextViewController *NVC = [self.storyboard instantiateViewControllerWithIdentifier:@"NextViewController"];
[self presentViewController:NVC animated:YES completion:nil];
17
Lukas Wiklund

Swift version:

Si vous êtes dans un contrôleur de navigation:

let viewController: ViewController = self.storyboard?.instantiateViewControllerWithIdentifier("VC") as ViewController
self.navigationController?.pushViewController(viewController, animated: true)

Ou si vous souhaitez simplement présenter une nouvelle vue:

let viewController: ViewController = self.storyboard?.instantiateViewControllerWithIdentifier("VC") as ViewController
self.presentViewController(viewController, animated: true, completion: nil)
16
King-Wizard

Pour rejeter le Viewcontroller appelé avec le code de réponses précédent par CmdSft

    ViewController *viewController = [[ViewController alloc] init];    
    [self presentViewController:viewController animated:YES completion:nil];

vous pouvez utiliser

    [self dismissViewControllerAnimated:YES completion: nil];
5
BlueAMG63

Version Swift 3.0

si vous voulez présenter le nouveau contrôleur. 

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "controllerIdentifier") as! YourController
self.present(viewController, animated: true, completion: nil)

et si vous voulez pousser vers un autre contrôleur (s'il est dans la navigation)

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "controllerIdentifier") as! YourController
self.navigationController?.pushViewController(viewController, animated: true)
4
Sahil
#import "YourViewController.h"

Pour afficher une vue, y compris la barre de navigation et/ou la barre d'onglets:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"YourStoryboard" bundle:nil];
YourViewController *viewController = (YourViewcontroller *)[storyboard instantiateViewControllerWithIdentifier:@"YourViewControllerIdentifier"];
[self.navigationController pushViewController:viewController animated:YES];

Pour définir l'identifiant sur un contrôleur de vue, ouvrez YourStoryboard.storyboard. Sélectionnez YourViewController View-> Utilities -> ShowIdentityInspector. Là, vous pouvez spécifier l'identifiant.

3
NimzApps

Cela a fonctionné pour moi:

NSTimer *switchTo = [NSTimer scheduledTimerWithTimeInterval:0.1
           target:selfselector:@selector(switchToTimer)userInfo:nil repeats:NO];

- (void) switchToTimer {
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPad" bundle:nil];
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"MyViewControllerID"]; // Storyboard ID
[self presentViewController:vc animated:FALSE completion:nil];
}
2
Walter Schurter
[self.navigationController pushViewController:someViewController animated:YES];
1
StuR

Swift 3.0 in

un contrôleur de vue à secondviewcontroller aller:

let loginVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MsgViewController") as! MsgViewController
        self.navigationController?.pushViewController(loginVC, animated: true)

2nd viewcontroller to 1stviewcontroller (retour) pour: bouton de retour sur l'événement action: -  

self.navigationController?.popViewController(animated:true)

3rdviewcontroller à 1st viewcontroller jump pour

self.navigationController?.popToRootViewController(animated:true)

et le storyboard le plus important dans la barre de navigation non cliqué, assurez-vous que cette action arrière effectue

1
ronak patel

Je pense que le PO demande comment échanger une VIEW sans changer de viewCONTROLLER. Est-ce que je comprends mal sa question?

En pseudocode, il veut faire:

laisser myController = instancier (someParentController)

let view1 = Bundle.main.loadNib (....) comme ... blah myController.setThisViewTo (view1)

laissez view2 = Bundle.main.loadNib (....) comme ... blah myController.setThisViewTo (view2)

Est-ce que je me trompe de question?

0
ChrisH