Dimiss莫代尔视图控制器在背景中

时间:2015-06-03 09:18:42

标签: ios objective-c cocoa cocoa-touch

我得到了View A present -> Modal View B, B present -> Modal View C Modal View D -> Modal View E。这是一个主视图 A ,然后是Modal视图的继承。
所以每次我提出新的模态 C或D 我想要解雇前一个模式(这样当我关闭新的模态时它将显示我的主视图A总是不是以前的模态)。

  • 如果我在B,我想要呈现C,那么我必须首先呈现C. 然后在后台我解雇B。
  • 如果我在C中,我想呈现E,那么我先呈现E然后呈现 在后台解雇C

我试过这段代码:

if (_openNextView) {
        if ([[NSUserDefaults standardUserDefaults] stringForKey:@"generatedCode"]) {
            NSLog(@"generated Code %@ : ", [[NSUserDefaults standardUserDefaults] stringForKey:@"generatedCode"]);
            NSLog(@"phone Number %@ : ", [[NSUserDefaults standardUserDefaults] stringForKey:@"phoneNumber"]);

            // Present C View
            RegisterSecondViewController *registerSecond = [[RegisterSecondViewController alloc] initWithNibName:@"RegisterSecondViewController" bundle:nil];

            //[self presentNatGeoViewController:registerSecond];

            [self presentViewController:registerSecond animated:YES completion:nil];
        } else {
            RegisterFirstViewController *registerFirst = [[RegisterFirstViewController alloc] initWithNibName:@"RegisterFirstViewController" bundle:nil];

             //present D view
            //[self presentNatGeoViewController:registerFirst];
            [self presentViewController:registerFirst animated:YES completion:nil];
        }
// Dismiss privious View (the current view before presenting new one)
    [self.parentViewController dismissViewControllerAnimated:YES completion:nil];

此外,我还在新呈现的模态视图中添加此代码

[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

但没有奏效,观点也没有被驳回

3 个答案:

答案 0 :(得分:1)

我会以模态方式呈现div some_id some_class 并使用它来呈现内容视图。然后,当您当前提供新的模态视图时,您只需设置导航控制器的div #some_id .some_class(动画)。

这将为您提供设置过程中的进展动画视图,但不允许用户返回,并在完成后取消分配VC。

答案 1 :(得分:0)

UIViewController有一个名为presentedViewController的属性:

  

presentedViewController
  属性视图控制器   由视图控制器或视图中的一个祖先呈现   控制器层次。 (只读)

这意味着,您只能在给定时间呈现一个模态控制器。为了呈现另一个,你需要首先解除当前的一个。

如果您想要自定义导航,我建议您创建一个自定义容器视图控制器,因为正常的模式演示不适合您的用例。 Here是Apple的指南。

答案 2 :(得分:0)

您可以在呈现新的vc之后关闭当前的vc。试试这个:

[self presentViewController:vc animated:YES completion:^{
    if (self.presentingViewController != nil) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self dismissViewControllerAnimated:NO completion:nil];
        });
    }
}];