【问题标题】:Dimiss modal View Controller in background在后台关闭模态视图控制器
【发布时间】:2015-06-03 09:18:41
【问题描述】:

我收到了 View A present -> Modal View B, B present -> Modal View C Modal View D -> Modal View E 。这是一个主视图A,然后是模态视图的继承。
所以每次我呈现新的模态 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];

但是没有用,视图也没有被关闭

【问题讨论】:

  • 你为什么使用模态?
  • 哦,对不起,我没注意它的注册系统,它可以从任何视图(如弹出窗口)中显示,有时用户可以跳过步骤但不能返回。你觉得这不是个好选择吗?

标签: ios objective-c cocoa cocoa-touch


【解决方案1】:

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

这将为您提供整个设置过程的动态视图,但不允许用户返回并在完成后释放 VC。

【讨论】:

  • 谢谢我已经尝试过了,我还隐藏了导航栏以使其看起来像模态视图,它起到了魅力谢谢
【解决方案2】:

UIViewController 有一个名为 presentedViewController 的属性:

呈现视图控制器
属性视图控制器是 由此视图控制器或其在视图中的祖先之一呈现 控制器层次结构。 (只读)

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

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

【讨论】:

  • 我想你错过了理解我,当我展示新的视图模式时,我想关闭前一个,所以当我关闭新的模式时,我会在屏幕上看到主视图 A 而不是以前的模式查看
【解决方案3】:

您可以在呈现新的 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];
        });
    }
}];

【讨论】:

  • 这将关闭新呈现的视图控制器
猜你喜欢
  • 2011-06-11
  • 2011-09-28
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多