我的presentViewController
功能存在问题。
我有一个登录菜单(A)和一个显示登录表单的按钮(B)。成功登录后,我将使用self.presentViewController
(C)提供第三个视图。
登录菜单(A) - >登录表格(B) - >内容(C)
它的工作,我可以提供第三个视图(C),但登录菜单(A)始终可见(我可以在UI Debug mod中看到它)。
那么,如何关闭A ViewController?
答案 0 :(得分:1)
presentViewController
,以模态方式呈现视图控制器。换句话说,在当前视图控制器的内容上,当前视图控制器将不会被取消分配。
为您的样本使用以下代码:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: <Identifier as in Storyboard of C>)
(UIApplication.shared.delegate as! AppDelegate).window?.rootViewController = vc
如果您想要包含转换,可以使用以下内容替换最后一行:
UIView.transition(from: currentRootViewController!.view, to: vc.view, duration: 0.8, options: .transitionCrossDissolve, completion: { (_) in
(UIApplication.shared.delegate as! AppDelegate).window?.rootViewController = vc
})
答案 1 :(得分:1)
如果我们考虑 presentVieController 机制,这不是问题或错误。如果你觉得你不想让你以前的控制器保留在Hierarchy中,那么你必须改变流程。
目前您的流程是:
A - &gt; RootViewController的。 B - &gt; LoginScreen C - &gt;容器
我建议在下面的答案中提及最佳做法。
Best practices for Storyboard login screen, handling clearing of data upon logout
如果您考虑处理流程,您可以解决您的问题。这是我的建议
建议:
要关闭多个视图控制器,您可以尝试下面的代码
-(void)dismissModalStack {
UIViewController *vc = self.presentingViewController;
while (vc.presentingViewController) {
vc = vc.presentingViewController;
}
[vc dismissViewControllerAnimated:YES completion:NULL];
}
希望它有帮助!
答案 2 :(得分:0)