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

时间:2011-09-14 04:50:06

标签: ios xcode ipad objective-c-2.0

基本上我想要弄清楚的是,我说有一个名为V1的视图控制器,里面有一个常规视图和一个按钮。现在,当您点击该按钮时,我希望该按钮创建一个动作,在同一视图控制器V1中弹出另一个名为V2的视图控制器。

V2的大小会减小一些,以至于它不会填满整个屏幕,但你仍然可以看到V2后面的第一层是V1。所以基本上,你永远不会离开V1。我希望这对我正在尝试做的事情有意义。我知道MTV应用程序具有这种功能。我在说什么的图像在这里:https://docs.google.com/leaf?id=0BzlCAVXRsIPcNWUxODM2MDAtNDE3OS00ZTc4LTk5N2MtZDA3NjFlM2IzNmZk&hl=en_US

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

由于

7 个答案:

答案 0 :(得分:24)

您可以通过设置modalPresentationStyle的相应属性类型来创建此类视图。请参阅下面的示例:

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

答案 1 :(得分:6)

试试这个:

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

答案 2 :(得分:3)

如果你想在 iOS 8 中将其作为模式弹出窗口提供,其风格类似于OP的截图,这就是我所做的:

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更喜欢这个,因为你不需要弄乱箭头方向,用户无法通过点击弹出窗口来关闭它。

也可以通过设计师在storyboard / nib中设置这些属性。设置preferredContentSize检查"使用首选显式大小"并设置值。

这仅适用于iPad。

答案 3 :(得分:1)

有一个非常好的库可以将视图控制器显示为iPhone上的Popup 见https://github.com/martinjuhasz/MJPopupViewController

答案 4 :(得分:1)

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

  
      
  1. 添加视图控制器(V2),按照您希望的方式设置UI
  2.   

*基于您附加的图片

  • 添加UIView - 将背景设置为黑色,将不透明度设置为0.5
  • 添加一个UIImageView - 它将作为你的弹出窗口(请注意,图像和视图不能具有相同的级别/层次结构。不要使imageview成为视图的子视图,否则uiview的不透明度将影响的UIImageView)
  
      
  1. 提出V2模式

  2.   
  3. 单击segue。在“属性”检查器中,将“演示文稿”设置为全屏。如果您愿意,可以删除动画

  4.   

Storyboard

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

Storyboard

  
      
  1. 选择V2的MainView(请检查图像)。将backgroundColor设置为清除颜色
  2.   

Storyboard

答案 5 :(得分:0)

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; 
<{1}}中的

---&gt;头文件

它对我有用,希望对你有用......

答案 6 :(得分:0)

UIView创建v2并添加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];
}