Pregunta

Tengo una aplicación de vista múltiple con UIViewControllers y xibs individuales. Tengo una vista que es la vista del juego y cada vez que lo llamo quiero que se reinicie, con eso quiero decir reiniciar en su condición inicial y no en el estado en que lo dejé por última vez.

Aquí está el bloque de código que estoy usando para cargar y eliminar vistas:

-(void)loadStartViewController {
[currentView.view removeFromSuperview];
StartViewController *startViewController = [[StartViewController alloc] initWithNibName:@"StartView" bundle:nil];
[window addSubview:startViewController.view];
currentView = startViewController;

}

Debería ser más claro aquí. Tengo un UIViewController y un xib que componen la vista mientras se juega el juego. Llaman a un método en una UIView para dibujar programáticamente la vista. Dejo el UIViewController cuando termina el juego y voy a una pantalla de puntuación. Quiero que el usuario reinicie y vuelva al juego, IE cargue el UIViewController con el código anterior pero comience con un nuevo juego, todas las configuraciones están en el método llamado. Podría establecer una variable y pasarla entre UIViewControllers, pero pensé que podría haber un comando que me permitiera restablecer el juego UIViewController para que no recuerde nada sobre el estado al final del último juego.

Para que funcione, escribí un método para restablecer todas las variables en la UIView que dibuja la pantalla del juego y llamar a ese método desde el UIViewController en la sección viewDidLoad.

¿Fue útil?

Solución

Supongo que su vista muestra algunos datos almacenados en el modelo (estado del juego). Entonces, ¿no querrías restablecer el estado del juego y dejar que la vista lo muestre? El sistema administra (carga / libera / vuelve a cargar) la vista cuando es necesario mostrarla o liberarla cuando la memoria del teléfono es baja. Entonces, si maneja su estado de juego por separado, debe actualizar el estado del juego (el modelo) y dejar que la vista lo muestre.

¿Qué quieres decir con mi "llamada a la vista"? ¿Quieres decir cuando pasas de un 'menú' a 'una pantalla de juego'?

Tal vez volver a cargar el estado del juego después de que se muestre la vista ayudaría. Hay algunos delegados como viewDidLoad , pero entiendo que se los llama después de cargar la vista. Sin embargo, si se está quedando sin memoria, es posible que su vista se libere y se vuelva a cargar más tarde, por lo que supongo que debe administrar el "estado" del juego usted mismo en el objeto modelo y dejar que la vista lo muestre.

No estoy seguro de si eso ayuda, no estoy muy seguro de lo que quisiste decir con mi 'llamar a la vista'.

Otros consejos

En lugar de realizar un seguimiento de la vista que se muestra actualmente, use un UINavigationController. Para eso están. En applicationDidFinishLaunching en su delegado de aplicaciones:

UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:startViewController];

Cree una variable de instancia en startViewController y pásele un puntero al controlador de navegación después de crearla. Luego, cuando quieras ir al juego:

[self.navigationController pushViewController:gameViewController animated:YES];

o no animado, lo que sea. Probablemente también quiera ocultar la barra de navegación con:

[self.navigationController setNavigationBarHidden:YES animated:NO];

Cuando finaliza el juego, puedes seguir presionando las vistas que quieras y siempre puedes volver a la primera vista con:

[self.navigationController popToRootViewControllerAnimated:YES];

Ah, y en cuanto a reiniciar el juego cada vez que juegas, simplemente implementa

-(void)viewWillAppear:(BOOL)animated{}

en el controlador de vista del juego y haga la inicialización que desee. Aunque, sinceramente, no estoy 100% seguro de que debas usar eso con un .xib ... Raramente uso Interface Builder, así que no estoy seguro. Pero creo que funcionaría.

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