it-swarm.com.de

Präsentationscontroller im Storyboard mit einem Navigationscontroller präsentieren - Swift

Ich zeige derzeit in meinem neuen Storyboard einen viewController:

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)

Dadurch wird der Viewcontroller jedoch ohne den eingebetteten Navigationscontroller angezeigt. Ich habe versucht, "WelcomeID" auf den Navigationscontroller innerhalb des Storyboards zu ändern - jedoch ohne Erfolg. 

Ich habe das in Objective -C arbeiten lassen, weiß aber nicht, wie ich es in Swift umwandeln soll:

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];

Wie können Sie das schnell tun?

37
Ryan

Du bist definitiv auf dem richtigen Weg. Wenn Sie einen View-Controller über seine Storyboard-ID referenzieren, ignoriert er leider die Tatsache, dass er in alles eingebettet ist. Dasselbe gilt für Segmente, wenn Sie zu einem eingebetteten Element wechseln. Der Controller für die Zielansicht ist der eingebettete Controller, nicht der Controller, an dem Sie normalerweise interessiert sind. Auf jeden Fall sollten Sie das Problem auf ähnliche Weise beheben können, wie Sie es getan haben Objective-C, also ist dies nur eine Übung zur Syntax-Portierung.

Bearbeiten: Storyboard-Namen jetzt mit Zeichenfolge definieren  

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)

ODER Sie können Ihrem Embedded View Controller eine ID zuweisen und diese stattdessen instanziieren.

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

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

Klassenname ist: SecondCiewController

Identifier Name

16
abdul sathar

Die Antwort von @Chris ist in älteren Swift-Versionen gut.

Update 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)

Vielen Dank!!!

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