¿Es posible pasar de un guión gráfico a otro o incrustar un guión gráfico en un controlador de vista en otro guión gráfico? Necesito colocar un UITabBarController
en un UINavigationController
, y me gustaría mantenerlos agradables y separados.
¿Es posible pasar de un guión gráfico a otro o incrustar un guión gráfico en un controlador de vista en otro guión gráfico? Necesito colocar un UITabBarController
en un UINavigationController
, y me gustaría mantenerlos agradables y separados.
Respuestas:
Sí, pero debes hacerlo mediante programación:
// 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, puede hacer esto gráficamente utilizando una referencia de guión gráfico:
Agregue Storyboard Reference a su storyboard. Crear segue entre ViewController y Storyboard Reference (Ctrl + arrastrar)
Luego llene estos campos.
Donde "Tutorial" es el archivo "Tutorial.storyboard" y "MainTutorialController" es su campo "Storyboard ID" en ViewControllerSettings
Realmente no puedes hacer segues manualmente porque UIStoryboardSegue es una clase abstracta. Debe subclasificarlo e implementarlo perform
para que pueda hacer cualquier cosa. Realmente están destinados a ser creados en guiones gráficos. Sin embargo, puede empujar el controlador de vista manualmente, lo cual es una buena solución. La respuesta de lnafziger hace esto bien:
UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"secondStoryBoard" bundle:nil];
UIViewController *theTabBar = [secondStoryBoard instantiateViewControllerWithIdentifier:@"myTabBar"];
[self.navigationController pushViewController:theTabBar animated:YES];
Sin embargo, una cosa a tener en cuenta es que has dicho que quieres mantener las cosas bonitas y separadas. La idea de los guiones gráficos es permitirle mantener las cosas separadas mientras realiza todo su trabajo de diseño en un solo lugar. Cada controlador de vista es agradable y está separado dentro del guión gráfico de los demás. La idea es mantener todo en un solo lugar. Simplemente colóquelo bien para que esté organizado, y estará listo para comenzar. No debe separarlo a menos que tenga una buena razón para hacerlo.
No debe colocar UITabBarControllers en un UINavigationController. Está pidiendo errores, como la autorrotación / descarga de vista incorrecta, etc., ya que Apple no admite este tipo de contención:
Sin embargo, cuando se combinan controladores de vista, el orden de contención es importante; solo ciertos arreglos son válidos. El orden de contención, de niño a padre, es el siguiente:
- Controladores de vista de contenido y controladores de vista de contenedor que tienen límites flexibles (como el controlador de vista de página)
- Controlador de vista de navegación
- Controlador de barra de pestañas
- Controlador de vista dividida
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)
}
intentaste lo siguiente:
2 / haga clic para seleccionar su controlador de vista que está vinculado a su controlador de navegación y en el menú superior: editor -> incrustar en -> controlador de barra de pestañas
Nota: No lo probé porque estoy usando lo contrario: hacer aplicaciones de barra con pestañas y poner el controlador de navegación dentro).