Estoy tratando de agregar un UIViewController (AddProjectViewController) a un Controlador de Navegación (navigationController), que tiene un tableView conjunto como root, y no funciona.

Esta es la forma en que tengo los archivos de configuración: http://d.pr/y8rt

El código está en ProjectsController.m – por favor ayuda 🙁

Debe ser añadido al hacer clic en el +, por lo que puedo ver la vista para agregar los proyectos.
¿Usted quiere empujar o deslizar en el controlador de vista de la parte inferior? (Sugiero que la presentan de forma modal (diapositiva en la parte inferior), ya que esto hace más sentido en términos de la actividad de la adición de algo y pulsa «Hecho» para volver a la lista)

OriginalEl autor vuzum | 2011-01-25

1 Comentario

  1. 16

    OK, así que voy a explicar a usted lo que está haciendo mal primero:

    //You're not allocating the view here.
    AddProjectViewController *nextController = addProjectViewController;
    //When allocated correctly above, you can simple push the new controller into view
    [self.navigationController pushViewController: (UIViewController *)addProjectViewController animated:YES];

    La empujó a la vista controlador se heredan automáticamente super (el controlador de vista de que la empuja a) de la barra de navegación (lo que significa que usted puede hacer llamadas en el auto.navigationController en el niño controlador de vista, ya que UINavigationController es simplemente una subclase de UIViewController (y así es UITableViewController).

    Aquí es lo que usted necesita hacer:

    //Allocate AddProjectViewController
    AddProjectViewController *addProjectViewController = [[AddProjectViewController alloc] init];
    //Adds the above view controller to the stack and pushes it into view
    [self.navigationController pushViewController:addProjectViewController animated:YES];
    //We can release it again, because it's retained (and autoreleases in the stack). You can also choose to autorelease it when you allocate it in the first line of code, but make sure you don't call release on it then!
    [addProjectViewController release];

    Sin embargo, para lo que estamos tratando de hacer, sería mucho mejor para presentar el controlador de vista modal, lo que significa que usted tendrá que mantener dentro de un controlador de navegación. He aquí cómo:

    //Allocate AddProjectViewController
    AddProjectViewController *addProjectViewController = [[AddProjectViewController alloc] init];
    //Create a navigation controller
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:addProjectViewController];
    //Release the view controller that's now being retained by the navigation controller
    [addProjectViewController release];
    //Adds the above view controller to the stack and present it modally (slide from bottom)
    [self presentModalViewController:navigationController animated:YES];
    //Release the navigation controller since it's being retained in the navigation stack
    [navigationController release];

    Tenga en cuenta que usted necesita para crear UIBarButtonItems en su AddProjectViewController clase.

    He actualizado el código y lo ha subido aquí: http://dl.dropbox.com/u/5445727/Zum.zip

    La esperanza de que esto ayude, usted tendrá que mirar en los comentarios de aquí, yo no los transfiere a su proyecto. Buena suerte 🙂

    Muchas gracias! Voy todo el código que enviaste, gracias de nuevo!
    Oh, sí, tiene sentido ahora! Voy a ir con el Modal Vista así, tiene más sentido. Gracias un millón!
    Eres bienvenido 🙂
    Tengo una pregunta más, si usted puede ayudar – ¿cómo puedo acceder a el formato tableview ahora, desde el AddProjectViewController? He añadido el addProject método de allí, pero cuando intento llamar a: [super.formato tableview reloadData]; no funciona. También, cuando les comente esta línea en particular, la aplicación se bloquea y los datos no se guardan. 🙁
    Usted tiene cuatro opciones: 1) Hacer un delegado para AddProjectsViewController que ProjectsController hereda. 2) el Uso NSNotifications 3) llamada reloadData en el formato tableview en viewWillAppear 4) Ya que usted está utilizando los Datos de los núcleos, de hecho, hay un delegado método que se activará cuando se cambian los datos (registros eliminados, etc). Añadir este método delegado en su ProjectsController y volver a cargar el formato tableview dentro de este método. Personalmente, me gustaría ir con la opción #4, puesto que ya ha configurado todos los CD de cosas, sólo tiene que añadir un libre delegado método y está casi listo!

    OriginalEl autor runmad

Dejar respuesta

Please enter your comment!
Please enter your name here