Как я могу наложить modalViewController поверх другого представления без исчезновения оригинала?

Я хочу показать настраиваемую панель оповещений над своим приложением, но в фоновом режиме будет отображаться предыдущий UIViewController. Я надеялся показать это как контроллер модального представления. Как это сделать, если предыдущий UIViewController не станет черным и не исчезнет?

Ответ 1

Вместо того, чтобы показывать новый vc как modal vc, вам нужно добавить его в качестве контроллера детского представления:

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];

Отклонить его:

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

Ответ 2

Вот что я использовал:

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;

Ответ 4

При представлении контроллера вида, использующего стиль UIModalPresentationFullScreen, UIKit обычно удаляет представления основного контроллера представления после завершения анимации перехода. Вы можете предотвратить удаление этих представлений, указав вместо этого стиль UIModalPresentationOverFullScreen. Вы можете использовать этот стиль, когда представленный контроллер представления имеет прозрачные области, которые позволяют показывать содержимое основного контента.

Отсюда

Итак, в основном создайте экземпляр своего диспетчера взглядов, укажите стиль модального презентации и затем представите контроллер вида.

Если вы хотите иметь (полу) прозрачный фон, просто отрегулируйте цвет главного представления контроллера.