ios - que - use container view swift 4
Compartir el mismo UIViewController como el controlador raĆzViewController con dos UINavigationControllers (3)
Actualización: he decidido ir por una ruta diferente con mi problema. En lugar de tratar de reutilizar el mismo UIViewController directamente, utilizo dos UAViewControllers vainilla que están configurados como rootViewControllers . En sus métodos loadView , hacen una llamada a [storyboard instantiateViewControllerWithIdentifier:]
para obtener el antiguo UIViewController y establecer sus vistas a la vista del controlador. Este es probablemente el enfoque preferido de todos modos, ya que necesito establecer varias variables y delegados.
Tengo un UIStoryBoard con un UITabBarController como punto de entrada conectado con dos UINavigationControllers . Cada uno de ellos comparte un UIViewController común como su controlador de vista raíz. Cuando se inicia la aplicación, se selecciona el primer UITabBarItem y la vista se carga como se esperaba. Sin embargo, cuando selecciono el segundo UITabBarItem , la misma vista no es visible. Veo el UINavigationBar con un fondo negro. ¿Estoy haciendo algo incorrecto con la interfaz Storyboard, o necesito crear una instancia de UIViewController manualmente a través de cada método de UINavigationController - loadView por ejemplo?
Extrañamente, esta es una pregunta que nadie más pregunta. Por lo que sé, no es posible compartir el RootViewController, que creo que es sin duda un error, ya que cuando inspecciona la conexión en el guión gráfico puede ver que el controlador de vista está conectado a ambos controles de navegación. Considero que esto es un defecto en el storyboard porque duplicar viewControllers y volver a aplicar todas sus conexiones es bastante propenso a errores y hace que los storyboards sean demasiado complejos.
Veo tu solución al problema. Las soluciones como esta me hacen cuestionar si la funcionalidad del guión gráfico actual en iOS está lista para crear aplicaciones. Creo que hay un problema conceptual con los guiones gráficos, Apple necesita decidir si viewController en un guión gráfico representa una instancia o si representa solo la clase, en este momento no es consistente, ya que puede ver que varios segues en realidad pueden apuntar a el mismo controlador de vista pero en realidad cada segue tiene su propia instancia, ¿por qué esto no se sigue también para las conexiones de rootViewController ?, no lo sé.
Al igual que una nota, con su solución, tenga en cuenta lo siguiente de la documentación de Apple:
"Importante Un controlador de vista es el único propietario de su vista y cualquier subvista que crea. Es responsable de crear esas vistas y de renunciar a la propiedad de ellas en los momentos apropiados, incluso en condiciones de poca memoria y cuando se libera el controlador de vista. Si usa un guión gráfico o un archivo de punta para almacenar sus objetos de vista, cada objeto de controlador de vista obtiene automáticamente su propia copia de estas vistas cuando el controlador de vista las solicita. Sin embargo, si crea sus vistas manualmente, nunca debe usar el misma vista objetos con múltiples controladores de vista ".
Definitivamente un error en Storyboards. Otra forma de hacerlo es crear UIViewControllers
básicos para cada UINavigationController
, luego tener un UIContainerView
que apunte al mismo UIViewController
en cada uno de los controladores de vista básicos.
Creo que la solución más fácil es establecer un controlador de vista raíz para su controlador de navegación en el guión gráfico y luego hacer algo como esto con su controlador de navegación:
- (void)viewDidLoad
{
[super viewDidLoad];
UIViewController *topVC = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil] instantiateViewControllerWithIdentifier:@"myTopVC"];
[self pushViewController:topVC animated:NO];
}
El primer VC presionado se convierte en la raíz.