Xcode:如何创build另一个视图控制器中出现的PopUp视图控制器

基本上我想要做的就是说,我有一个视图控制器,称为V1,有一个常规的看法里面,一个button。 现在,当您点击该button时,我想要该button创build一个动作,在同一个视图控制器V1中popup另一个视图控制器V2。

V2的尺寸会减小一些,这样它就不会填满整个屏幕,但是你仍然可以看到V2后面的第一层V1。 所以基本上,你永远不会离开V1。 我希望这对我正在尝试做的事情有意义。 我知道MTV应用程序有这个function。 我在谈论的内容在这里: https : //docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=zh_CN

示例代码或示例是我正在寻找的。

谢谢

你可以通过设置适当的属性typesmodalPresentationStyle来创build这样的视图。 看到我的例子如下:

 UIViewController *V2 = [[UIViewController alloc] init]; V2.modalPresentationStyle = UIModalPresentationFormSheet; V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [V1 presentViewController:V2 animated:YES completion:nil]; V2.view.superview.frame = CGRectMake(0, 0, 540, 620); //it's important to do this after presentModalViewController V2.view.superview.center = V1.view.center; [V1 release]; 

尝试这个:

 V2 *d = [[V2 alloc]initWithNibName:@"V2" bundle:nil];//assuming V2 is name of your nib as well d.delegate = self; //Optional:you only need this if you want to delegate //create popover and put V2 in the popover view UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:d]; popoverController.delegate = self; //optional CGSize size = CGSizeMake(325, 75); // size of view in popover…V2 popoverController.popoverContentSize = size; [d release]; [popoverController presentPopoverFromRect:yourButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

如果你想在iOS 8中以类似于OP的屏幕截图的forms呈现这个模式,

 UIViewController *V2 = [[UIViewController alloc] init]; // V2 is the popup V2.modalPresentationStyle = UIModalPresentationFormSheet; V2.modalTransitionStyle = UIModalTransitionStyleCoverVertical; V2.preferredContentSize = CGSizeMake(325, 75); // size of popup view [V1 presentModalViewController:V2 animated:YES]; // V1 is the current topmost view controller 

我比使用UIPopover更喜欢这一点,因为您不需要混淆箭头方向,而且用户无法通过点击popup窗口之外的方法closures它。

这些属性也可以通过devise器在故事板/笔尖中设置。 要设置preferredContentSize,请选中“使用首选显式大小”并设置值。

这只适用于iPad。

有一个非常好的库来显示一个视图控制器作为popup在iPhone上看到这里https://github.com/martinjuhasz/MJPopupViewController

file .m —>这是执行文件

 -(IBAction)anyAlert:(id)sender{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"A Message" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK!", @"Other Title", nil]; [alert show]; [alert release]; } 

记得申报

 -(IBAction)anyAlert:(id)sender; 

file .h —>头文件中

它适合我,希望对你…

v2创buildUIView并添加到v1

 - (void)viewDidLoad { UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchDown]; [button setTitle:@"Show View" forState:UIControlStateNormal]; button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); [self.view addSubview:button]; } - (void)aMethod:(id)sender { CGRect * imageFrame = CGRectMake(10, 90, 300, 300); V2 *v2 = [[V2 alloc] initWithFrame:imageFrame]; [self.view addSubview:v2]; } 

如果您正在使用Storyboard,则可以按照以下步骤操作:

  1. 添加视图控制器(V2),以您想要的方式设置UI

*根据您附加的图像

  • 添加一个UIView – 设置背景黑色和不透明度为0.5
  • 添加一个UIImageView – 这将作为你的popup窗口(请注意,图像和视图不能有相同的级别/层次结构。不要使图像视图的子视图,否则uiview的不透明度将影响uiImageView)
  1. 现在V2 Modally

  2. 点击继续。 在“属性”检查器中,将“演示文稿设置为全屏幕” 。 删除animation,如果你喜欢

故事板

  1. selectV2。 在“属性”检查器中,将“演示文稿设置为全屏幕” 。 检查定义上下文并提供上下文

故事板

  1. select您的V2的MainView(请查看图片)。 将backgroundColor设置为清除颜色

故事板