Question Present View Controller dans Storyboard avec un contrôleur de navigation - Swift


Je montre actuellement un viewController dans mon nouveau storyboard 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 viewcontroller 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 le transformer rapidement:

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?


33
2017-08-15 12:46


origine


Réponses:


Vous êtes définitivement sur la bonne voie. Malheureusement, lorsque vous référencez un contrôleur de vue par son ID storyboard, il ignore le fait qu'il soit incorporé dans quelque chose. Il en va de même pour les segues lorsque vous accédez à quelque chose d’incorporé, le contrôleur de vue de destination sera le contrôleur d’incorporation, pas le contrôleur qui vous intéresse habituellement. De toute façon, vous devriez pouvoir résoudre le problème de la même manière Objective-C, il ne s'agit donc que d'un exercice de portage de syntaxe.

Edit: Définissez le nom du storyboard avec la 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 donner à votre contrôleur de vue d'intégration un ID et l'instancier à la place.


84
2017-08-15 16:57



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

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

Le nom de la classe est: SecondCiewController

Identifier Name


16
2017-10-30 09:16



La réponse donnée par @Chris fonctionne bien dans les anciennes versions de swift.

Mettre à jour 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!!!


7
2017-07-11 10:43