Tengo un problema al configurar un Outlet de vista predeterminado de View Nib Controller en el Interface Builder. Aquí está mi configuración:UINavigationController NIB requiere que el propietario del archivo tenga una vista?
Tengo una aplicación basada en TabBar cargo un regulador de la navegación como una vista modal ...
MyNavCtrlrSubClass *menu = [[MyNavCtrlrSubClass alloc]initWithNibName:@"MenuController" bundle:nil];
[tabBarController presentModalViewController:menu animated:anim];
MenuController mismo está estructurado de la siguiente manera:
MenuController.xib File's Owner (MyNavCtrlrSubClass : UIViewController) Navigation Controller (UINavigationController) Navigation Bar (UINavigationBar) Root View Controller (Nib Name is set to load AnotherViewController.nib) Navigation Item -> (UINavigationItem)
Todo esto funciona bien, excepto que cuando se carga MyNavCtrlrSubClass, aparece el siguiente error:
Loaded the "MenuController" nib but the view outlet was not set
Está claro por qué sucede esto: el propietario del archivo no tiene una conexión de salida para su vista. La pregunta es, ¿qué debería establecer como su vista, y tiene que establecerse algo en primer lugar? La barra de navegación es el único candidato en MenuController.xib, pero hacer esto simplemente cambiará el tamaño de UINavigationBar en el modo de pantalla completa, por así decirlo.
Obviamente me falta algo en IB, pero ¿qué? MyNavCtrlrSubClass.m no tiene código en sí, excepto un IBOutlet para UINavigationController. ¿Estoy cometiendo un error al tratar de configurar esto en IB? La idea es mantener el Controlador de navegación modal en una plumilla y todas las vistas que se cargan en plumillas separadas, pero como MenuController es solo un contenedor para la navegación y no contiene ninguna vista en sí, obviamente estoy diseñando mal. :)
Si se está preguntando por qué no lo estoy diseñando de otra manera, es porque estoy tratando de obedecer a mi percepción (posiblemente errónea) de cómo IB le pide que cree una jerarquía ideal.
Cualquier ayuda sería muy apreciada.
¡Gracias por la respuesta informativa! Estoy a punto de ver qué puedo hacer con esto, y volveré a publicar pronto. Por ahora, permítanme preguntar: ¿cómo cargarían una punta modal del controlador de navegación, diseñando tanto como sea posible en Interface Builder? ¿Es necesario, como en su ejemplo, configurar una plumilla Ver Controlador y luego crear el Controlador de Navegación programáticamente, o puedo definir la jerarquía de vista solo en IB? –
NOTA: parece que crear el Controlador de navegación programmicamente significaría que también tengo que configurar su propia jerarquía de controlador de vista mediante programación, y entonces me estoy alejando cada vez más de IB, comenzando con el controlador de navegación hacia abajo. –
Puede crear un controlador de navegación y un controlador de vista raíz en el código, y cargar la vista para el controlador de vista raíz en IB. No será incómodo. También puede crear el controlador de navegación y su controlador de vista raíz en un XIB separado de la vista del controlador de vista raíz. Esta XIB separada es típicamente MainWindow.xib. Cuando se carga el archivo MainWindow.xib, se crearán los dos controladores de vista. Cuando el controlador de vista raíz primero necesita su vista, lo cargará desde el segundo archivo XIB. Esa es la forma típica de hacer esto. –