web-dev-qa-db-fra.com

Contrôleur de vue dans Storyboard avec contrôleur de navigation - Swift

Je montre actuellement un viewController dans mon nouveau story-board ci-dessous:

var storyboard : UIStoryboard = UIStoryboard(name: AccountStoryboard, bundle: nil)
var vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
vc.teststring = "hello"        
self.presentViewController(vc, animated: true, completion: nil)

Cependant, cela présente le contrôleur de navigation sans son contrôleur de navigation intégré .. J'ai essayé de remplacer "WelcomeID" par le contrôleur de navigation dans le storyboard, mais sans succès. 

Je travaille dans Objective -C, mais je ne sais pas comment me transformer en Swift:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SetupStoryboard" bundle:nil];
UINavigationController *navigationController1 = [storyboard instantiateInitialViewController];
navigationController1.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController1.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

WelcomeViewController *vc = (WelcomeViewController *)navigationController1.viewControllers[0];
vc.teststring = @"Hello";

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

Comment pouvez-vous faire cela rapidement?

37
Ryan

Vous êtes définitivement sur la bonne voie. Malheureusement, lorsque vous référencez un contrôleur de vue par son ID de storyboard, il ignore le fait qu'il est intégré à quoi que ce soit. Il en va de même lorsque vous passez à quelque chose d'intégré, le contrôleur de vue de destination sera le contrôleur d'intégration, et non le contrôleur qui vous intéresse habituellement. Quoi qu'il en soit, vous devriez pouvoir résoudre le problème de la même manière que vous l'avez fait dans Objective-C, il ne s'agit donc que d'un exercice de portage de syntaxe.

Modifier: Définissez le nom du storyboard avec une chaîne maintenant  

let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil)
let vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
vc.teststring = "hello"        

let navigationController = UINavigationController(rootViewController: vc)

self.presentViewController(navigationController, animated: true, completion: nil)

OU vous pouvez attribuer un identifiant à votre contrôleur de vue par intégration et l'instancier à la place.

88
Chris Wagner
 let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeID") as SecondViewController

        self.navigationController?.pushViewController(secondViewController, animated: true)

Le nom de la classe est: SecondCiewController

Identifier Name

16
abdul sathar

La réponse donnée par @Chris est que cela fonctionne bien dans les anciennes versions de Swift.

Mise à jour de Swift 3 & Swift 4

   let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil)
   let vc : WelcomeViewController = storyboard.instantiateViewController(withIdentifier: "WelcomeID") as! WelcomeViewController
   vc.teststring = "hello"

   let navigationController = UINavigationController(rootViewController: vc)

   self.present(navigationController, animated: true, completion: nil)

Merci!!!

9
Harjot Singh
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SalesVC") as! SalesVC

navigationController?.pushViewController(vc, animated: true)
0
Aditya A.Rajan