presentando ViewController con NavigationViewController swift

Tengo el sistema "NavigationViewController -> MyViewController", y programáticamente quiero presentar MyViewController dentro de un tercer controller de vista. El problema es que no tengo barra de navigation en MyViewController después de presentarlo. ¿Me puedes ayudar?

var VC1 = self.storyboard.instantiateViewControllerWithIdentifier("MyViewController") as ViewController self.presentViewController(VC1, animated:true, completion: nil) 

Llamar a presentViewController presenta el controller de vista de manera modal , fuera de la stack de navigation existente; no está contenido en su UINavigationController ni en ningún otro. Si desea que su nuevo controller de vista tenga una barra de navigation, tiene dos opciones principales:

Opción 1. Empuje el nuevo controller de vista en su stack de navigation existente, en lugar de presentarlo de manera modal:

 let VC1 = self.storyboard!.instantiateViewControllerWithIdentifier("MyViewController") as! ViewController self.navigationController!.pushViewController(VC1, animated: true) 

Opción 2. Incruste su nuevo controller de vista en un nuevo controller de navigation y presente el nuevo controller de navigation de manera modal:

 let VC1 = self.storyboard!.instantiateViewControllerWithIdentifier("MyViewController") as! ViewController let navController = UINavigationController(rootViewController: VC1) // Creating a navigation controller with VC1 at the root of the navigation stack. self.presentViewController(navController, animated:true, completion: nil) 

Tenga en count que esta opción no includeá automáticamente un button "Atrás". Tendrás que build un mecanismo cerrado tú mismo.

Cuál es el mejor para usted es una pregunta de layout de interfaz humana, pero normalmente está claro lo que tiene más sentido.

Mi barra de navigation no se estaba mostrando, así que he usado el siguiente método en Swift 2 iOS 9

  let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("Dashboard") as! Dashboard // Creating a navigation controller with viewController at the root of the navigation stack. let navController = UINavigationController(rootViewController: viewController) self.presentViewController(navController, animated:true, completion: nil) 

SWIFT 3

 let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "MyViewController") as! MyViewController let navController = UINavigationController(rootViewController: VC1) self.present(navController, animated:true, completion: nil) 

Utilicé una extensión para UIViewController y una estructura para asegurarme de que mi vista actual se presenta desde los favoritos

1. Estructura para un Bool global

 struct PresentedFromFavourites { static var comingFromFav = false} 

2.UIVeiwController extensión: presentado de manera modal como en la segunda opción por "stefandouganhyde – Opción 2" y la resolución de la espalda

 extension UIViewController { func returnToFavourites() { // you return to the storyboard wanted by changing the name let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) let mainNavigationController = storyBoard.instantiateViewController(withIdentifier: "HomeNav") as! UINavigationController // Set animated to false let favViewController = storyBoard.instantiateViewController(withIdentifier: "Favourites") self.present(mainNavigationController, animated: false, completion: { mainNavigationController.pushViewController(favViewController, animated: false) }) } // call this function in viewDidLoad() // func addBackToFavouritesButton() { if PresentedFromFavourites.comingFromFav { //Create a button // I found this good for most size classes let buttonHeight = (self.navigationController?.navigationBar.frame.size.height)! - 15 let rect = CGRect(x: 2, y: 8, width: buttonHeight, height: buttonHeight) let aButton = UIButton(frame: rect) // Down a back arrow image from icon8 for free and add it to your image assets aButton.setImage(#imageLiteral(resourceName: "backArrow"), for: .normal) aButton.backgroundColor = UIColor.clear aButton.addTarget(self, action:#selector(self.returnToFavourites), for: .touchUpInside) self.navigationController?.navigationBar.addSubview(aButton) PresentedFromFavourites.comingFromFav = false } }}