在后台关闭模态视图控制器
Posted
技术标签:
【中文标题】在后台关闭模态视图控制器【英文标题】: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 始终不是前一个模态)。
我试过这段代码:
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];
但是没有用,视图也没有被关闭
【问题讨论】:
你为什么使用模态? 哦,对不起,我没注意它的注册系统,它可以从任何视图(如弹出窗口)中显示,有时用户可以跳过步骤但不能返回。你觉得这不是个好选择吗? 【参考方案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];
);
];
【讨论】:
这将关闭新呈现的视图控制器以上是关于在后台关闭模态视图控制器的主要内容,如果未能解决你的问题,请参考以下文章