Segue a otro storyboard?

¿Es posible seguir de un guión gráfico a otro o insert un guión gráfico en un controller de visualización en otro guión gráfico? Necesito colocar un UITabBarController en un UINavigationController , y me gustaría mantenerlos bien separados.

Sí, pero tienes que hacerlo programáticamente:

 // Get the storyboard named secondStoryBoard from the main bundle: UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil]; // Load the initial view controller from the storyboard. // Set this by selecting 'Is Initial View Controller' on the appropriate view controller in the storyboard. UIViewController *theInitialViewController = [secondStoryBoard instantiateInitialViewController]; // // **OR** // // Load the view controller with the identifier string myTabBar // Change UIViewController to the appropriate class UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"]; // Then push the new view controller in the usual way: [self.navigationController pushViewController:theTabBar animated:YES]; 

A partir de Xcode 7 en adelante, puede hacer esto gráficamente utilizando una reference de Storyboard:

referencia

Agregue la reference del guión gráfico a su guión gráfico. Cree segue entre ViewController y Reference de Storyboard (ctrl + arrastre)

Luego completa estos campos.

introduzca la descripción de la imagen aquí

Donde "Tutorial" es el file "Tutorial.storyboard" y "MainTutorialController" es su campo "ID del Guión Gráfico" en ViewControllerSettings

Realmente no puedes hacer segues manualmente porque UIStoryboardSegue es una class abstracta. Debe subclass e implementa perform para que haga cualquier cosa. Realmente están destinados a ser creados en storyboards. Sin embargo, puede impulsar manualmente el controller de vista, que es una buena solución. La respuesta de lnafziger lo hace bien:

 UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil]; UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"]; [self.navigationController pushViewController:theTabBar animated:YES]; 

Una cosa a tener en count, sin embargo, es que has dicho que quieres mantener las cosas bien y por separado. La idea de storyboards es permitirle mantener las cosas separadas mientras hace todo su trabajo de layout en un solo lugar. Cada controller de vista es agradable y está separado en el guión gráfico de los demás. La idea es mantenerlo todo en un solo lugar. Simplemente expóngalo bien para que esté organizado, y estarás listo. No debe separarlo a less que tenga una muy buena razón para hacerlo.

No debe colocar UITabBarControllers en un UINavigationController. Está pidiendo errores como autorotation incorrecta / descarga de vistas, etc., ya que Apple no admite este tipo de contención:

Sin embargo, cuando se combinan los controlleres de vista, el order de contención es importante; Solo ciertos arreglos son válidos. El order de contención, de niño a padre, es el siguiente:

  • Los controlleres de vista de contenido y los controlleres de vista de contenedor que tienen límites flexibles (como el controller de vista de página)
  • Controlador de vista de navigation
  • Controlador de barra de tabs
  • Controlador de vista dividido

Aquí hay una versión rápida:

 let targetStoryboardName = "Main" let targetStoryboard = UIStoryboard(name: targetStoryboardName, bundle: nil) if let targetViewController = targetStoryboard.instantiateInitialViewController() { self.navigationController?.pushViewController(targetViewController, animated: true) } 

probaste lo siguiente:

2 / haga clic para seleccionar su controller de vista que está vinculado a su controller de navigation y en el menu superior: editor -> embed in -> Controlador de barra de tabs

Nota: no lo probé porque estoy usando lo contrario: crear aplicaciones de barra con tabs y poner el controller de navigation dentro).