如何在没有原始消失的情况下将modalViewController覆盖在另一个视图的顶部?

时间:2012-10-28 16:00:52

标签: iphone objective-c ios uiviewcontroller

我想在我的应用上显示自定义提醒面板,但在后台显示以前的UIViewController。我希望将其显示为模态视图控制器。如果没有先前的UIViewController变黑并消失,我该怎么做呢?

4 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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;

答案 2 :(得分:0)

有一个cool blurred组件。当然,只是品味问题。 :)

答案 3 :(得分:0)

  

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

From here

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

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