Swift: creación instantánea de un controller de navigation sin guiones charts en el Delegado de aplicaciones

Estoy reconstruyendo una aplicación sin storyboards y la parte de la que estoy teniendo más problemas es navegar por vista para ver de forma progtwigda. Pocas cosas están escritas allí que no utilizan storyboards, por lo que encontrar una respuesta para esto ha sido difícil.

Mi problema es bastante simple. Tengo mi ViewController y mi SecondViewController y quiero empujar desde el primero hasta el último.

En AppDelegate :

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // Override point for customization after application launch. window = UIWindow(frame: UIScreen.mainScreen().bounds) window?.backgroundColor = UIColor.whiteColor() window?.rootViewController = ViewController() window?.makeKeyAndVisible() return true } 

Luego en ViewController.swift :

 class ViewController: UIViewController, AVAudioPlayerDelegate, UITextFieldDelegate { override func viewDidLoad() { super.viewDidLoad() startFinishButton.setTitle("Begin", forState: .Normal) startFinishButton.addTarget(self, action: "moveToSecondViewController", forControlEvents: .TouchUpInside) view.addSubview <*> startFinishButton } func moveToSecondViewController(sender: UIButton) { let vc = SecondViewController() println(self.navigationController) // returns nil self.navigationController?.pushViewController(vc, animated: true) } } 

La printing de self.navigationController devuelve cero. He intentado hacer:

var navController = UINavigationController() cuando se crea la class ViewController (pero fuera de ViewDidLoad, justo debajo de la statement de la class) e hizo el push utilizando navController var, pero eso no funcionó.

Estoy pensando que tal vez la solución es crear un controller de navigation en el Delegado de aplicaciones que toda la aplicación usaría, supongo que como una variable global?

Mi esperanza es que esta publicación pueda servir a muchos otros que son nuevos en Swift y quieren eliminar storyboards de su aplicación.

Gracias por echar un vistazo y por tu ayuda.

En Swift 3

Coloque este código dentro del método didFinishLaunchingWithOptions en la class AppDelegate.

 window = UIWindow(frame: UIScreen.main.bounds) let mainController = MainViewController() as UIViewController let navigationController = UINavigationController(rootViewController: mainController) navigationController.navigationBar.isTranslucent = false self.window?.rootViewController = navigationController self.window?.makeKeyAndVisible() 

En AppDelegate

 var window: UIWindow? var navController: UINavigationController? func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { navController = UINavigationController() var viewController: ViewController = ViewController() self.navController!.pushViewController(viewController, animated: false) self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.rootViewController = navController self.window!.backgroundColor = UIColor.whiteColor() self.window!.makeKeyAndVisible() return true } 

En ViewController

 class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.title = "FirstVC" var startFinishButton = UIButton.buttonWithType(UIButtonType.System) as! UIButton startFinishButton.frame = CGRectMake(100, 100, 100, 50) startFinishButton.backgroundColor = UIColor.greenColor() startFinishButton.setTitle("Test Button", forState: UIControlState.Normal) startFinishButton.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside) self.view.addSubview(startFinishButton) } func buttonAction(sender:UIButton!) { println("Button tapped") let vc = SecondViewController() self.navigationController?.pushViewController(vc, animated: true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }