Pregunta

tengo problemas con la obtención del -dismissModalViewControllerAnimated: al trabajo en el IPAD (como una aplicación para el iPhone). Por alguna razón, no parece hacer nada.

Me llaman -presentModalViewController: animación: en MainViewController, después de lo cual he tratado de llamar a la -dismissModalViewController en el controlador de vista presentado (usando [auto dismissModalViewController ] ), que entiendo que remite la solicitud a la MainViewController. También he intentado configurar un delegado en el controlador de vista presentado ( viewControllerAboutToBePresented.delegate = sí; ), y luego llamando a [self.delegate dismissModalViewController: SÍ] . Ninguno de los enfoques parece hacer nada cuando corro la aplicación para iPhone en el iPad.

¿Cómo puedo descartar el controlador de vista modal en el IPAD?

¿Fue útil?

Solución

Tenía esta la primera vez que un proyecto portado iPhone al iPad - era [self dismissModalViewControllerAnimated:] que estaba fallando en silencio. El proyecto estaba usando los controladores de vista de cacao sobre un fondo de OpenGL, y pensé que era algo que ver con eso.

Debido a la fecha límite ridículamente apretado, que no tenía tiempo para trabajar en lo que estaba pasando, y así me acaba de agregar el punto de vista modal como subvista del controlador de vista actual, y se lo quitó cuando estaba hecho. (Sí, un truco, pero eso es escalas de tiempo para ti ...)

Otros consejos

Me llenar publicar esto como un comentario, pero soy incapaz de hacerlo.

Es el principal controlador de vista que debe llamar a dismissModelViewControllerAnimated: . Usted puede llamar [[auto parentViewController] dismissModalViewControllerAnimated:] en el controlador de vista presentado o definir un método en un protocolo que descartar el controlador de vista modal e implementar el protocolo en el controlador principal punto de vista, configurarlo como el delegado del controlador de vista presentado y llamar al método de ella. Que está haciendo de la manera equivocada. Se puede o no puede resolver su problema.

Actualizar (ejemplo de código no está disponible en los comentarios):

En el MainViewController usted debe tener algo como esto

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // In this case is inside a tableviewmethod, but it could really be an action associated with a button.

    DetailViewController *controller = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:[NSBundle mainBundle]];
    [controller setDelegate:self]; // The delegate is the parent and is assigned, not retained.

    // Modal presentation style is only used on iPad. On iPhone is always full screen.
    // [controller setModalPresentationStyle:UIModalPresentationFullScreen];

    [controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
    [self presentModalViewController:controller animated:YES];
    [controller release]; // It will be deallocated upon dismissal.
}

-(void)dismissDetailViewControllerAndProcessData:(NSDictionary *)data {

    // Do something with the data passed.
    [self processData:data];

    // Dismiss the modalviewcontroller associated with this viewcontroller.
    [self dismissModalViewControllerAnimated:YES];
}

, mientras que en el controlador de la vista de detalle presentado como controlador de vista modal, el único que se necesita es algo como esto

-(void)actionBack:(id)sender {

    // Call the delegate method. If you just need to dimiss the controller, just
    // call
    // [[self parentViewController]dismissModalViewControllerAnimated:YES];
    // and don't even bother to set up a delegate and a delegate method.

    [delegate dismissDetailViewControllerAndProcessData:nil]; // Call the parent dismissal method.
}

pero si la aplicación está funcionando muy bien en el iPhone, que debería funcionar igual de bien en el IPAD como aplicación para el iPhone.

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