¿Cómo me aseguro de que mi controller de vista detallada esté siempre embedded en un UINavigationController?

Tengo un UISplitViewController que tiene un prefernetworkingDisplayMode = .AllVisible . Aquí es cómo configuré mi storyboard, observe cómo el Controller de View Detail ya está integrado en un UINavigationController .

Ejecuto el siguiente método cuando se toolBar un button específico en la toolBar de toolBar del Master View Controller:

 @IBAction func entertainmentBarButtonItemTapped(sender: AnyObject) { self.showDetailViewController(self.storyboard!.instantiateViewControllerWithIdentifier("SearchViewController") as! SearchViewController, sender: sender) } 

Ahora esto funciona bien en un iPhone en modo vertical, pero en modo horizontal en un iPhone 6+, no veo ninguna navigationBar de navigationBar para el controller de vista detallada (el que acaba de presentarse). Este no es el comportamiento que deseo. Tenga en count que el controller de vista de detalles pnetworkingeterminado está embedded en un UINavigationController , por lo que, como puede imaginar, parece inconsistente cuando la UINavigationController navigationBar repente falta.

Entonces, bash lo siguiente:

 @IBAction func entertainmentBarButtonItemTapped(sender: AnyObject) { self.showDetailViewController(self.storyboard!.instantiateViewControllerWithIdentifier("NavigationSearchViewController") as! NavigationSearchViewController, sender: sender) } 

Ahora estoy reemplazando mi controller de vista detallada con el mismo VC que antes, pero en su lugar está embedded en un UINavigationController . El comportamiento funciona como se esperaba en un 6+ en modo horizontal, ya que muestra la barra de navigation.

Pero en el modo vertical, veo un comportamiento fallado, porque ahora que el nuevo VC es empujado a la stack, veo que la toolBar desaparece en el controller de vista de detalles original, causando una extraña transición en la que claramente algo no salió bien.

¿Cómo puedo usar correctamente showDetailViewController(..) para que siempre tenga mi controller de vista detallada embedded en un UINavigationController pero sin transiciones extrañas? Creo que esto requiere que modifique los delegates de UISplitViewController, pero sigo recibiendo un 'No puedo empujar UINavigationController para astackr'. error.

Edit: El único delegado que modifiqué:

 func splitViewController(splitViewController: UISplitViewController, collapseSecondaryViewController secondaryViewController: UIViewController, ontoPrimaryViewController primaryViewController: UIViewController) -> Bool { //Since splitViewController!.showViewController changes secondaryViewController to no longer be a UINavigationController, this must first be checked for there to even be a BlankVC. if let secondaryNavController = secondaryViewController as? UINavigationController { if ((secondaryNavController.topViewController) != nil) { return true } return false } 

Actualmente veo el mismo comportamiento.

Probablemente el problema sea su método delegado UISplitViewController

splitViewController: separateSecondaryViewControllerFromPrimaryViewController:

que no mostraste

Sospecho que está devolviendo el controller detailView en lugar del controller de navigation que lo contiene.

Sí, implementa el delegado:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.splitViewController.delegate = self; ... } #pragma mark - UISplitViewControllerDelegate /* On iPhone 6 Plus: Portrait: This method is called and YES is returned. Landscape: This method is not called. On iPad Air Portrait: This method is not called. Landscape: This method is not called. */ - (BOOL) splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController { if (self.masterNavController.topViewController) { return YES; } return NO; }