Pregunta

Una especie de pregunta simple. Tengo un tableview en un navigationcontroller. Cuando toco una célula, se empuja un controlador de vista con la información de la celda, para que pueda editarlo en la nueva vista. Ahora que es el trabajo correcto (que podemos llamar el informationpath: "RootViewController -> viewcontroller empujado"). Pero cuando hago clic en Guardar en el nuevo punto de vista, quiero que los valores editados a volver de viaje a la RootViewController antes de que llame popviewcontroller (informationpath: "viewcontroller empujado -> RootViewController"), por lo que los valores editados se pueden visualizar en el tableview.

¿Cuál es el enfoque correcto para esto?

EDIT:

pushViewController y popViewController está trabajando. Yo sólo pedí el mejor enfoque para obtener la información editada volver a la RootViewController para su visualización en el tableview, cuando fue llamado Save-botón (popViewController). Creo que voy a tener que editar el PLIST con la nueva información directamente del viewController empujado. Aunque preferiría enviar la nueva información a la RootViewController y tienen que manejar el acceso al archivo plist.

¿Fue útil?

Solución

Tengo la misma situación - dos tableviews. Las primeras pantallas de televisión una lista de registros de bases de datos y cuando uno está girado que pasa a través de la segunda TableView que muestra los detalles del registro. Lo hago empujando los detalles TableViewController en la pila de controladores de navegación. Hasta ahora, por lo que ir y bastante simple.

El problema que encontramos fue que después de la actualización del registro en la vista de detalles de mesa (controlador), quería dejar que la lista de tablas controlador de vista conocimientos, de modo que pudiera actualizar la lista de registros.

Lo primero que hice fue añadir un alojamiento a la vista controlador Tabla detallada del modo que cuando una fila fue seleccionado en la lista de registros, el controlador lista podría pasar los datos básicos entidad gestionada al controlador de datos.

Al mismo tiempo, también añadido el controlador lista como un observador de los acontecimientos básicos de cambio de datos de esta manera:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

Así que si la vista Tabla detallada y actualizar el registro del controlador, el controlador de la lista lo ha llamado método de dataSaved:, pasando un objeto NSNotification.

En el método dataSaved: I examinar el objeto y si la entidad de datos de núcleo que está siendo editado es en la lista actualizada, entonces establece un indicador para señalar se requiere una actualización. Sin embargo, si hay un registro de la lista insertada, significa que un nuevo registro se ha creado y se inserta en la base de datos, por lo que se establece un indicador para desencadenar una recarga completa de la vista lista de la tabla.

Cuando el usuario vuelve a la lista de controlador de vista, se activa el método viewDidAppear:. En este método examino las banderas y cualquiera de las llamadas

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

para volver a cargar el registro específico si el registro se actualiza, o decirle a la vista de tabla que hacer una recarga completa si hay una inserción de un nuevo registro.

Finalmente I a continuación, quitar el controlador lista como un observador de las notificaciones de datos básicos, ya que ya no está interesado.

No sé si esta es la forma recomendada de hacer esto, pero hasta ahora está funcionando para mí.

Otros consejos

Se puede tratar de reloadData antes popViewController pero se debe publicar algo de código.

Todos los UIViewControllers tienen un método navigationController. Cuando se presiona un controlador de vista a un controlador de navegación, que la propiedad se establece en el punto al controlador de navegación.

Por lo tanto, sólo llame [self.navigationController popViewControllerAnimated:YES]; en el controlador de vista.

Además, hacer parecer no confundir y controladores de vista. Al hacer clic en Guardar en la vista, usted debe asegurarse de que el botón de guardar llama a un método en el controlador de vista, que a su vez se comunica con el controlador de navegación.

En tocando una fila Vas a nueva vista con la información adecuada.

Aquí realizar alguna operación, como la edición de datos. Así que primero guardar los cambios en clic en el botón Guardar (llamando a un IBAction) y en este método IBAction comprobará wheter (los cambios se han guardado correctamente) a continuación, llamar

[self.navigationController popViewControllerAnimated: YES];

Y asegurar que propia tabla de recarga por databese actualizados (por este cambio matriz de datos llamando al método de base en el método viewWillAppear).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top