web-dev-qa-db-fra.com

iOS: présent contrôleur de vue par programme

J'utilise la méthode presentViewController:animated:completion: pour accéder à un autre contrôleur de vue.

Ceci est mon code:

AddTaskViewController *add = [[AddTaskViewController alloc] init];
[self presentViewController:add animated:YES completion:nil];

Ce code va à l'autre UIViewController mais l'autre contrôleur est vide. J'ai toujours utilisé des storyboards, mais maintenant, j'ai besoin que cela soit fait en code.

32
Salieh

Si vous utilisez un storyboard, vous ne devriez probablement pas utiliser alloc et init pour créer un nouveau contrôleur de vue. Au lieu de cela, regardez votre storyboard et trouvez le segue que vous voulez jouer; il devrait avoir un identifiant unique (sinon, vous pouvez en définir un dans la barre latérale droite).

Une fois que vous avez trouvé l'identifiant de cette séquence, envoyez à votre contrôleur current view un message -performSegueWithIdentifier:sender:

[self performSegueWithIdentifier:@"mySegueIdentifier" sender:self];

Ainsi, le storyboard instanciera un AddTaskViewController et le présentera de la manière que vous avez définie pour cette séquence.


Si, par contre, vous n'utilisez pas de story-board, vous devez alors attribuer à votre AddTaskViewController une sorte d'interface utilisateur. Le moyen le plus courant consiste à initialiser le contrôleur avec un nib: au lieu d'appeler simplement init, vous appelez -initWithNibName:bundle: et fournissez le nom d'un fichier .xib contenant votre interface utilisateur add-task:

AddTaskViewController *add = [[AddTaskViewController alloc]
                              initWithNibName:@"AddTaskView" bundle:nil];
[self presentViewController:add animated:YES completion:nil];

(Il existe d’autres moyens (moins courants) d’associer une vue à votre nouveau contrôleur de vue, mais vous aurez probablement le moins de difficulté à travailler.)

46
Tim

Si vous utilisez Storyboard et que votre viewController "add" est dans le storyboard, définissez un identifiant pour votre viewcontroller "add" dans les paramètres afin que vous puissiez faire quelque chose comme ceci:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"NameOfYourStoryBoard" 
                                                     bundle:nil];
AddTaskViewController *add = 
           [storyboard instantiateViewControllerWithIdentifier:@"viewControllerIdentifier"];

[self presentViewController:add 
                   animated:YES 
                 completion:nil];

si vous n'avez pas votre "add" viewController dans le storyboard ou dans un fichier nib et que vous voulez tout créer par programme, appDocs dit:

Si vous ne pouvez pas définir vos vues dans un storyboard ou un fichier nib, substituez la méthode loadView pour instancier manuellement une hiérarchie de vue et affectez-la à la propriété de vue.

31
Leg1oneR

Vous devez définir l'identifiant du storyboard à partir de l'inspecteur d'identité du storyboard

 AddTaskViewController *add=[self.storyboard instantiateViewControllerWithIdentifier:@"storyboard_id"];
 [self presentViewController:add animated:YES completion:nil];
2
Rajesh Gupta

votre code :

 AddTaskViewController *add = [[AddTaskViewController alloc] init];
 [self presentViewController:add animated:YES completion:nil];

ce code peut aller à l'autre contrôleur, mais vous obtenez un nouveau viewController, pas le contrôleur de votre storyboard, vous pouvez faire comme ceci:

AddTaskViewController *add = [self.storyboard instantiateViewControllerWithIdentifier:@"YourStoryboardID"];
[self presentViewController:add animated:YES completion:nil];
1
klone

Le meilleur moyen est

AddTaskViewController * add = [self.storyboard instantiateViewControllerWithIdentifier:@"addID"];
[self presentViewController:add animated:YES completion:nil];
1
Sahidul Islam

Essayez ce code:

[self.navigationController presentViewController:controller animated:YES completion:nil];
0
Oshitha Wimalasuriya

Essayez ce qui suit:

NextViewController *nextView = [self.storyboard instantiateViewControllerWithIdentifier:@"nextView"];
[self presentViewController:nextView animated:YES completion:NULL];
0
MNIDR