ios - Segue a otro guión gráfico?
xcode cocoa-touch (6)
¿Es posible pasar de un guión gráfico a otro, o insertar 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.
¿Has probado 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: crear aplicaciones de barra con pestañas y colocar el controlador de navegación dentro).
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)
}
Desde Xcode 7 en adelante, puedes hacer esto gráficamente usando una referencia del guión gráfico:
Agrega la referencia del guión gráfico a tu guión gráfico. Crear segue entre ViewController y Storyboard Reference (ctrl + drag)
Luego llena estos campos.
Donde "Tutorial" es el archivo "Tutorial.storyboard" y "MainTutorialController" es su campo "Storyboard ID" en ViewControllerSettings
No debe colocar UITabBarControllers en un UINavigationController. Está pidiendo errores tales como autorrotación incorrecta / descarga de vistas, etc., ya que Apple no admite este tipo de contención:
Sin embargo, cuando se combinan controladores de visualización, 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 la barra
- Controlador de vista dividida
Realmente no puedes hacer los cambios manualmente porque UIStoryboardSegue es una clase abstracta. Necesita subclasificarlo e implementarlo para que pueda hacer cualquier cosa. Realmente están destinados a ser creados en guiones gráficos. Sin embargo, puede pulsar el controlador de vista manualmente, que 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];
Una cosa a tener en cuenta, sin embargo, es que has dicho que quieres mantener las cosas bien y separadas. La idea de guiones gráficos es permitirle mantener las cosas separadas mientras hace 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. Solo extiéndelo bien para que esté organizado, y estarás listo para irte. No debes separarlo a menos que tengas una buena razón para hacerlo.
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];