¿Cómo superpongo un modalViewController sobre otra vista sin desaparecer el original?

Quiero mostrar un panel de alerta personalizado en mi aplicación, pero tengo el UIViewController anterior visible en segundo plano. Tenía la esperanza de mostrar esto como un controller de vista modal. ¿Cómo hago esto sin que el UIViewController anterior se vuelva negro y desaparezca?

En lugar de mostrar el nuevo vc como un vc modal, debe agregarlo como controller de vista secundaria:

AlertPanelVC *alertVC = ... [self addChildViewController: alertVC]; alertVC.view.frame = ...; //or something equivalent if you're using auto layout [self.view addSubview: alertVC.view]; [alertVC didMoveToParentViewController: self]; 

Para descartarlo:

 [alertVC willMoveToParentViewController:nil]; [alertVC.view removeFromSuperview]; [alertVC removeFromParentViewController]; 

Esto es lo que he usado:

 MyCustomAlertViewController *myCustomAlertViewController = [[MyCustomAlertViewController alloc]initWithNibName:@"MyCustomAlertViewController" bundle:nil]; myCustomAlertViewController.delegate = self; //optional if you have delegate setup [myCustomAlertViewController setModalPresentationStyle:UIModalPresentationPageSheet]; [myCustomAlertViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; [self presentViewController:myCustomAlertViewController animated:YES completion:^{ //do stuff after the view is displayed. }]; myCustomAlertViewController.view.superview.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin; myCustomAlertViewController.view.superview.frame = CGRectMake(calculatedCenterX, CalculatedCenterY, myCustomAlertViewControllerWidth, myCustomAlertViewControllerHeight); //calculatedCenterX = (1024 - myCustomAlertViewControllerWidth) / 2; //for example //calculatedCenterY = (768 - myCustomAlertViewControllerHeight) / 2; 

hay un componente fresco y borroso para eso. Por supuesto, solo una cuestión de gustos. 🙂

Al presentar un controller de vista utilizando el estilo UIModalPresentScreenFullScreen, UIKit normalmente elimina las vistas del controller de vista subyacente una vez que finalizan las animaciones de transición. Puede evitar la eliminación de esas vistas especificando el estilo UIModalPresentationOverFullScreen en su lugar. Puede usar ese estilo cuando el controller de vista presentado tiene áreas transparentes que permiten mostrar el contenido subyacente.

De aquí

Así que, básicamente, cree una instancia de viewcontroller, especifique el estilo de presentación modal y luego presente el controller de vista.

Si desea tener un background (semi) transparente, simplemente ajuste el color de la vista principal del controller de vista.