2012-02-20 18 views
8

Estoy intentando volver a pasar de mi UIViewController a mi UITableViewController, pero parece que no funciona de la manera que quiero. Creé mi interfaz con guiones gráficos desde el principio, por lo que no me interesa moverme de una vista a otra por código. Hasta ahora, acababa de publicar mis Views per sergues, que son fáciles de implementar con guiones gráficos. Pero cuando intenté volver a mis Vistas anteriores, se implementará un nuevo ViewController, por lo que todos los datos que almacené en el anterior se "pierden".Retroceso de un controlador a uno anterior

En realidad no hay ningún código que pudiera presentarle (a causa de las sergues), pero la situación es la siguiente:

-> Tengo una materia almacenar MutableArray en mi UITableView.

-> El usuario toca el botón de escaneo, escanea un nuevo ítem que debería importarse en mi matriz.

-> Cuando trato de empujar hacia atrás a mi mesa, veo que hay un nuevo Controlador que me aturde, ajeno a los datos que almacené en el anterior.

Entonces, ¿cómo puedo simplemente volver a mi antiguo Controlador impidiendo crear uno nuevo todo el tiempo?

¿Un sergue-push siempre crea un nuevo controlador?

(pregunta puede ser simple, pero soy nuevo en estas cosas probado algunos resultados presentados por la función de búsqueda, pero ninguno de ellos trabajó :(.)

/editar: Popback problema ha sido resuelto, pero matriz problema llenando todavía existe Código:..

GeneralSettings *sharedGS = [GeneralSettings sharedInstance]; 
sharedGS.strEAN = [[NSString alloc] initWithString:strCheckString]; 
[sharedGS.listArray insertObject:strCheckString atIndex:0]; 
NSLog(@"Anzahl der EAN-Codes: %d\nErster Code: %@\n In Variable: %@", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex:0],sharedGS.strEAN); 

datos en sharedGS.strEAN ("83274572354" es decir) datos en listArray (nulo)

Respuesta

20

no empujar hacia atrás que crea una nueva instancia de la clase de controlador anterior. Retrocedes. Puedes lograr eso de 2 maneras.

1: en el código ingrese la siguiente declaración cuando desee regresar (pop) a su controlador de vista de tableta.

[self.navigationController popViewControllerAnimated:YES];

2: Si desea hacerlo de guión gráfico que necesita para implementar la siguiente clase segue personalizado:

aplicación

// PopSegue.m 

#import "PopSegue.h" 

@implementation PopSegue 

- (void) perform { 

    UIViewController *src = (UIViewController *) self.sourceViewController; 
[src.navigationController popViewControllerAnimated:YES]; 
} 

y la cabecera

// PopSegue.h 

#import <UIKit/UIKit.h> 

@interface PopSegue : UIStoryboardSegue 

@end 

Coloque este método en su UIViewController para establecer un pr operty de vuelta a su UITableViewController:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"goBackToTableView"]) { 
    [[segue destinationViewController] set{whatEverProperyYouWantTo}: {valueOfPropertyToSet}]; 
    } 
} 
+0

Gracias! estoy usando la primera de ellas, ya que sería un poco sobredimensionado para crear una nueva clase para un solo estallido de vuelta. Pero mi serie todavía no está funcionando como previsto ... Busqué mi variable y mis datos están allí ("432436274" por ejemplo), pero cuando intento agregarlos a mi matriz con un addObject o insertObject: atIndex cmd, no hay datos cosa que está sucediendo ¿Podrías ayudarme allí también? – blaluma

+0

El código se parece a: 'GeneralSettings * sharedGS = [GeneralSettings sharedInstance]; sharedGS.strEAN = [[NSString alloc] initWithString: strCheckString]; [sharedGS.listArray insertObject: strCheckString atIndex: 0]; NSLog (@ "Anzahl der EAN-Codes:% d \ nErster Code:% @ \ n In Variable:% @", sharedGS.listArray.count, [sharedGS.listArray objectAtIndex: 0], sharedGS.strEAN); ' ¿El formato de código no funciona o lo estoy haciendo mal? 'Mi código' ? – blaluma

+0

Puede configurar un delegado y delegar protocolo, pero una forma más simple es usar la segunda opción. La segunda forma es bastante fácil: simplemente copie mi código en una nueva clase objetivo-c. A continuación, en el UIViewController implementar un método prepareForSegue y establecer una propiedad en el controlador de vista de destino (su UITableViewController). Publicaré el método prepareForSegue en puede responder arriba. –

3

@T.J Al adoptar este método "2: Si desea hacerlo de guión gráfico que necesita para implementar la siguiente clase segue personalizado:

aplicación"

y de acuerdo con the document de los siguientes, "Configuración del controlador de destino cuando un Segue se activa iOS realiza las siguientes tareas cuando un segue se dispara:.

se crea una instancia del controlador de vista de destino se instancia un nuevo objeto segue que contiene toda la información para la segue se dispare 012.351.Nota: Un segue de popover también proporciona una propiedad que identifica el controlador de popover utilizado para controlar el controlador de vista de destino. Llama al método prepareForSegue: sender: del controlador de vista de origen, pasando el nuevo objeto segue y el objeto que desencadenó el cambio. Llama al método de ejecución de segue para llevar el controlador de destino a la pantalla. El comportamiento real depende del tipo de transición que se realiza. Por ejemplo, una transición modal le dice al controlador de vista de origen que presente el controlador de vista de destino. Libera el objeto segue y la segue es completa. "

Ejemplifica la presentación viewController una vez más, luego dealloc después de que se llame el método override de" realizar ". Por lo tanto, es mejor elegir el primer método que envíe o el métodode el delegado de acuerdo the document.

Gracias

Cuestiones relacionadas