以编程方式在iOS中显示另一个UIViewController作为弹出窗口?

时间:2015-12-14 10:47:24

标签: ios objective-c uiviewcontroller popup

我有主信息中心(UITableViewController),一旦我登录,我需要显示此页面,其中包含使用UIViewController显示的欢迎讯息。

如何从我的ViewDidAppear()方法中显示此弹出窗口?

使用以下代码且无效

  -(void)viewDidAppear:(BOOL)animated{
        popupObj= [self.storyboard instantiateViewControllerWithIdentifier:@"popup"];
        [popupObj setModalPresentationStyle:UIModalPresentationCurrentContext];
    }

请帮帮我..

我看到了几个stackoverflow链接

更新

当我将代码更改为此代码时

-(void)viewDidAppear:(BOOL)animated{
    popupObj= [self.storyboard instantiateViewControllerWithIdentifier:@"popup"];
   // [popupObj setModalPresentationStyle:UIModalPresentationCurrentContext];
    popupObj.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    popupObj.modalTransitionStyle = UIModalPresentationPopover;
    [self presentViewController:popupObj animated:YES completion:nil];
}

现在我可以看到我的UIViewController即将弹出,但现在UIViewController 以全屏视图显示。

但我只需要frame (320 , 320)

4 个答案:

答案 0 :(得分:1)

popupObj= [self.storyboard instantiateViewControllerWithIdentifier:@"popup"];
popupObj.view.frame = CGRectMake(20, 200, 280, 168);
[self.view addSubview:popupObj.view];
[self addChildViewController:popupObj];

你可以添加UIViewController作为子视图并设置它的框架,使它看起来像弹出窗口。 希望这会对你有所帮助。

答案 1 :(得分:1)

我有两种方式,也许不是很好,但大部分时间都在工作。

首先,当第二个视图控制器出现时,显示第一个视图控制器的屏幕截图。像这样:

- (void)setBackGround {
    UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, [UIScreen mainScreen].scale);
    [self.presentingViewController.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:NO];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    self.view.layer.contents = (__bridge id)(image.CGImage);
}
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    if (!_isShown) {
        _isShown = YES;
        [self setBackGround];
    }
}

不要忘记设置" _isShown = NO"当init。

第二:你只能初始化一个视图,并在带有动画的视图控制器上显示它。代码:http://blog.moemiku.com/?p=101

我在博客上更新了一个示例。 Direct download url the gif

答案 2 :(得分:0)

您的代码会创建视图控制器并设置其显示样式,但实际上并未显示它。要做到这一点,你现在需要这两行:

[self presentViewController:popupObj animated:true completion:nil];

答案 3 :(得分:0)

请在rootviewcontroller上设置导航控制器:

 -(void)viewDidAppear:(BOOL)animated
 {  
      popupObj= [self.storyboard instantiateViewControllerWithIdentifier:@"popup"];
      [self.navigationController presentViewController:popupObj animated:YES completion:nil];

  }

或者

  -(void)viewDidAppear:(BOOL)animated
  {  
     popupObj= [self.storyboard instantiateViewControllerWithIdentifier:@"popup"];
        [self.view addSubview:popupObj.view];
  }