10

我想在我的应用程序上显示一个自定义的警报面板,但在后台可以看到之前的 UIViewController。我希望将其显示为模态视图控制器。我该如何做到这一点,而不会使之前的 UIViewController 变黑并消失?

4

4 回答 4

17

您需要将其添加为子视图控制器,而不是将新 vc 显示为模态 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];
于 2012-10-28T16:09:29.343 回答
1

这是我用过的:

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;
于 2012-10-28T16:30:35.520 回答
0

有一个很酷的模糊组件。当然,只是口味问题。:)

于 2012-10-28T16:58:39.723 回答
0

当使用 UIModalPresentationFullScreen 样式呈现视图控制器时,UIKit 通常会在过渡动画完成后移除底层视图控制器的视图。您可以通过指定 UIModalPresentationOverFullScreen 样式来阻止删除这些视图。当呈现的视图控制器具有允许底层内容显示的透明区域时,您可能会使用该样式。

从这里

所以基本上实例化你的视图控制器,指定模态呈现样式,然后呈现视图控制器。

如果你想要一个(半)透明的背景,只需调整视图控制器主视图的颜色。

于 2017-09-20T18:06:19.093 回答