1. Paso: Crear un nuevo UIViewController:

– Xcode -> Archivo Nuevo… -> Cocoa Touch Clase -> UIViewController

– Nombre: MyViewController

2. Paso: Arrastrar y soltar un «Controlador de Navegación» (UINavigationController) de la Biblioteca para MyViewController.xib

Cómo agregar un Controlador de Navegación con Interface Builder?

3.Paso: estoy seguro, tengo que hacer algo para conectar el Controlador de Navegación correctamente, ¿no?

4.Paso: Intentar iniciar el nuevo Controlador de Vista como un cuadro de diálogo modal:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
[self.navigationController presentModalViewController: myViewController animated:YES]; 

Resultado: «navContr: nil»

5.Paso: Se puede ver la nueva modal vista (MyViewController), pero no hay NavigationController y no UINavigationBar.

Muchas gracias por su ayuda!


ACTUALIZACIÓN 1:

6.Paso: puedo configurar una nueva UIViewController (ViewNavi2) como «la Raíz de Vista Controlador»:

Cómo agregar un Controlador de Navegación con Interface Builder?

7.Paso: puedo definir un IBOutlet UINavigationController *navigationController en la clase MyViewController y configurar el xib: Navegación Controlador -> Conexiones -> Referencia a Tomas

Pero mi Navegación Controlador es todavía nil 🙁

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
NSLog(@"navContr: %@", myViewController.navigationController);
//-> "navContr: nil"
aquí es la simple tutorial para agregar controlador de Navegación

OriginalEl autor Manni | 2011-01-12

3 Comentarios

  1. 15

    También quería incluir la navegación controlador en el archivo NIB, pero todos los que la documentación de Apple dijo fue que «no óptima» sin que explican cómo hacerlo. Yo quería que mi principal con pestañas de la ventana para llamar a una ventana modal que contiene los típicos controles de navegación, sin definir el controlador de navegación mediante programación. Voy a compartir cómo lo hice yo.

    Su código fue muy similar a la mía, ya que yo también define un IBOutlet UINavigationController *navigationController en MyViewController. Desde el Interface Builder, simplemente he definido mi punto de vista en la raíz de controlador de vista y establecer el Dueño del Archivo->ver a la definición de la vista.

    Y de manera similar a su código, hice el siguiente en mi ventana padre:

    MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
    [self presentModalViewController:myViewController animated:YES];

    (Estoy llamando presentModelViewController en el auto, no sé por qué había self.navigationController.) Cuando he probado este, el resultado fue que mi vista se ha cargado desde el archivo NIB, pero la barra de navegación faltaba. Una línea más de código en MyViewController fija este:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        [self setView:myNavigationController.view];
    
    }

    Todo lo que estoy haciendo aquí, es la configuración de MyViewController la vista de punto a myNavigationController.la vista, que contiene todo lo que se ha definido en el archivo NIB, incluyendo la navegación controlador.

    Muchas gracias por tu gran respuesta! Estoy seguro de que esto va a ayudar a un montón de gente! 🙂 @todos: por favor VOTAR
    Yo traté de hacer algo muy similar. Esto me salvó un montón de trabajo. Gracias!
    Muy hermosa explicación.Gracias.
    Puedes mostrar una imagen de la xib archivo? Estamos supongamos tener una Vista (que es el propietario de la vista) y otro UINavigationController en el nivel superior? Entonces qué sería de nuestros objetos de interfaz de usuario ir a la UINavigationController de la vista o de la Visión original?

    OriginalEl autor Henry

  2. 2

    Vistazo a la plantilla en XCode para una Navegación basada en la Aplicación». (Nuevo Proyecto -> la Navegación basada en la Aplicación), a Continuación, abra la ventana principal.xib en el Interface Builder. Aunque no es un punto de vista, pensar que es el viewcontroller que creó en el paso 1. Veamos entonces la «Raíz de Controlador de Vista» que se hace referencia en el inspector y ver cómo está conectado a la «Raíz de Controlador de Vista de» punta en los Atributos del inspector y el «RootViewController» de la Clase en la Identidad del inspector.

    Querrás poner el contenido que se desea mostrar en la raíz de su navegación en su versión de «RootViewController». Normalmente, el controlador que se muestra a continuación, es un «DetailViewController». De nuevo, lea el código de ejemplo que la plantilla proporciona y verás cómo empezar en eso. Mira el código comentado en didSelectRowAtIndexPath en la plantilla de ejemplo de la RootViewController.m. Usted tendrá que crear su propio punto de vista controlador para servir como el DetailViewController.

    Esperemos que esto va a aclarar las cosas para usted.

    //EDICIONES basa su Comentario//

    El Apple docs decir que si usted desea utilizar IB para hacer su Navegación controladores que realmente debería poner en tu ventana principal.xib. Yo estaba jugando con el hecho de que usted no puede tener el NavigationController como una subvista de su UIView objeto. Lo que usted puede hacer si usted ha comenzado a partir de es el uso de IB para agregar una barra de Navegación de objetos a la vista controlador y, a continuación, el control de las cosas desde allí.

    De la documentación de Apple «, Aunque también puede cargar de forma independiente o de forma modal presentó la navegación de los controladores de su principal archivo nib (o cualquier otro archivo nib), haciendo así que no es óptimo. En esos escenarios, normalmente es más fácil crear el controlador de navegación mediante programación en el punto de uso.»

    //MÁS EDICIONES//
    En XCode4 la plantilla de proyecto que ahora se llama un «Maestro» Detalle de proyecto. Esto es debido a que se configura como una división de controlador de vista en el iPad pero siendo el proyecto de navegación en el iPhone. Donde puedo referencia «RootViewController» en la respuesta, ahora usted va a encontrar algo que se llama «MasterViewController»

    Muchas gracias por tu ayuda! I analizar la Navegación basada en la Aplicación cuidadosamente. Sí, hay un MainWindow.xib con un Controlador de Navegación. Está conectado con el AppDelegate, que es la única diferencia a mi MyViewController. En el proyecto de plantilla, usted no puede ver cómo MainWindow.xib se inicializa y tal vez mi código «MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@»MyViewController» del paquete:nil];» es incorrecto. Por favor, busque «ACTUALIZACIÓN de 1» en mi pregunta.
    A partir de la documentación de Apple «, Aunque también puede cargar de forma independiente o de forma modal presentó la navegación de los controladores de su principal archivo nib (o cualquier otro archivo nib), haciendo así que no es óptimo. En esos escenarios, normalmente es más fácil crear el controlador de navegación mediante programación en el punto de uso.»
    Sí, tienes razón, sería más fácil para crear el controlador de navegación mediante programación, pero tengo que hacer esto con el Interface Builder. La razón se puede encontrar aquí: stackoverflow.com/questions/4604647/… ¿aún tienes algunas ideas para mí?
    En la otra pregunta que usted menciona, parece que tienes la vista controlador/controlador de navegación para trabajar cuando la pones en un MainWindow.xib. Lo que yo sugeriría es que ejecuta el uno que funciona de esa manera a través de la ingeniosa nib2objc (github.com/akosma/nib2objc) de software. Esto debe darle algún objetivo C los archivos que usted puede mirar para ver cómo los diferentes elementos son creados y relacionados unos con otros.
    Apple ha eliminado la capacidad de hacer que el proyecto de Xcode4 – aunque usted todavía tiene que hacerlo para todos los iOS 4.0/4.1/4.2 proyectos. Sería de gran ayuda si pudieras enlace a un ejemplo de un proyecto, o explicar que es EXACTAMENTE LO que ocurre en ese proyecto

    OriginalEl autor Walter

  3. 0

    El siguiente código no te dará ningún objeto válido.

    NSLog(@"navContr: %@", myViewController.navigationController);

    La razón es porque navigationController propiedad de UIViewController sólo devuelve un controlador de navegación si el controlador de vista es en su pila. Esta propiedad es nula si un controlador de navegación no se encuentra. Su vista controlador no está en la pila del controlador de navegación. De todas formas yo aún no estoy seguro de si usted inicializar correctamente nuestra navegación controlador. Leer la documentación.

    Gracias por la ayuda, también! Se las costuras, que «el punto de vista controlador no está en la pila». Sí, creo que no tengo inicializar correctamente mi controlador de navegación. Pero, ¿cómo puedo hacer que en el Interface Builder? Puedo actualizar mi pregunta, por favor, eche un vistazo en «UPDATE 1».
    También, si su visión ESTÁ en el nav controlador de pila, pero se (auto)publicado en algún lugar que no debería tener, auto.navigationController podría ser nulo. Doh!

    OriginalEl autor Oleg Danu

Dejar respuesta

Please enter your comment!
Please enter your name here