Pregunta

He leído todas las cuentas de problemas de otros usuarios, pero no parecen concluir con un resultado que funcione para mí o terminan con 'Lo arreglé, muchachos, gracias por la ayuda', pero luego descuidaron compartir su solución Aquí está mi código para presentar y descartar (todos los objetos clave son propiedades del delegado de mi aplicación. Estoy tratando de abrir una página Acerca de y luego volver a la aplicación. ¿Qué hice mal?

Presente VC modal (funciona):

-(IBAction) showInfoButton: (id) sender {
NSLog(@"%s", __FUNCTION__);

if( aboutViewController == nil ) {
    aboutViewController = [[[AboutViewController alloc] initWithNibName:@"About" bundle:[NSBundle mainBundle]] autorelease];
    [appDelegate.window addSubview: aboutViewController.view];
}

appDelegate.modalNavigationController = [[UINavigationController alloc] initWithRootViewController:aboutViewController];

[appDelegate.modalNavigationController presentModalViewController:appDelegate.modalNavigationController animated: YES];

}

Mi descarte del controlador de vista Acerca de (no funciona):

-(IBAction) dismissAbout: (id) sender {
NSLog(@"%s", __FUNCTION__ );

[self dismissModalViewControllerAnimated:YES];

}

He intentado la animación 'NO', pero eso no hizo ninguna diferencia. Intenté hacer coincidir mi código con el código de otros, pero eso no hizo ninguna diferencia. Estoy dando vueltas en círculos, por lo que cualquier ayuda es apreciada.

¿Fue útil?

Solución

La plantilla predeterminada para un controlador invertido en XCode, sugiere que necesita tener un delegado en su controlador modal, que lo señala de nuevo a su controlador inicial. Lo más fácil es si crea un nuevo proyecto en xcode, elige la aplicación Utilidad y echa un vistazo al código.

En resumen, este debería ser el código en su pantalla principal controlador

- (IBAction)showInfo;
{    

    InfoScreen * aboutViewController = [[InfoScreen alloc] initWithNibName:@"InfoScreen" bundle:nil];
    aboutViewController.delegate =self;

    [self presentModalViewController: aboutViewController animated:YES];

    [aboutViewController release];
}

- (void)flipsideViewControllerDidFinish;
{

    [self dismissModalViewControllerAnimated:YES];
}

Y esta es la acción de su botón de retroceso en su sobre pantalla :

- (IBAction)done {
    [self.delegate flipsideViewControllerDidFinish];
    self.delegate = nil;
}

Hay un poco más en el código para que el delegado responda al flipsideViewControllerDidFinish, etc., que no tiene que ver con el rechazo del controlador sobre el que está preguntando, pero al buscar en la plantilla de la aplicación Utility déjalo claro.

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