我知道这可能是一件容易的事,但我无法理解如何解决它。顺便提一下,我没有使用NavigationController
。基本上我的应用程序中有3个视图控制器:
LoginVC
(这有一个注册按钮。点击时会转到SignupVC)SignupVC
(如果用户注册,则会推送到MainAppVC)MainAppVC
(有一个退出按钮)对于过渡,我使用方法:present(viewController, animated:, completion:)
当用户通过LoginVC登录时,他将按预期显示MainAppVC。当他退出时,我dismiss
当前的VC(即MainAppVC)将他发送回LoginVC
。
现在我遇到问题。当用户没有帐户并注册时,这将是他将通过的VC(LoginVC> SignupVC> MainAppVC)。一旦他成功注册,他就会被提交给MainAppVC。现在,一旦他退出,他就会从MainAppVC转换到SignupVC,因为我使用了相同的dismiss
方法。
我想要做的是将用户从MainAppVC发送回LoginVC。如何在我的项目中不使用导航控制器的情况下实现这一目标?流行的应用程序(Facebook,Twitter,Instagram等)如何在他们的应用程序中处理这个问题?
我能想到的一种方法是执行从第3个到第1个VC的segue,但我认为这是一种肮脏的方式,因为它只是添加到堆栈,而不是将其弹出,这是一个潜在的问题。
答案 0 :(得分:2)
有三种解决方案 1.使用窗口根视图控制器。在登录和主视图控制器之间设置根视图控制器。
let loginSb = UIStoryboard(name: "Login", bundle: nil)
let loginVc = loginSb.instantiateInitialViewController()
window!.rootViewController = loginVc
2.首次显示主视图控制器时,请关闭注册视图控制器。并从登录视图控制器显示主视图控制器。
3.当您关闭主视图控制器时,尝试关闭完成块中的注册视图控制器
我认为第一个是最好的。
答案 1 :(得分:2)
如果被迫不使用rootViewController
(UINavigationController
),你应该检查MainAppVC
哪一个是前一个VC(示例中为伪代码)并执行:
注意:Swift 3 Code。
// If previous VC is LoginVC
dismiss(animated: true)
// else if previous VC is SignupVC
// here's what you want
presentingViewController?.presentingViewController?.dismiss(animated: true)
希望有所帮助。
答案 2 :(得分:1)
另一个选择是使用展开segues。
在要返回的ViewController中,按如下方式实现方法
@IBAction func unwindToLogin(segue: UIStoryboardSegue) {
}
然后在Storyboard中,从最后一个ViewController右键单击并从按钮(例如)拖动到Exit并选择unwindToLoginWithSegue。
请注意,您也可以以编程方式执行此操作。 Here是一个很好的教程。
答案 3 :(得分:1)
最佳方法是: 用户注册成功后解除SignUpVC,然后从LoginVC出现MainVC。
在SignupVC中:
self.dismissViewControllerAnimated(true, completion: {
self.LoginVC!.present(MainVC, animated: true, completion:nil)
})
这种方法主要用于。