所以我有一个登录视图,在成功登录后,它会转到导航控制器的第一个视图,然后用户可以更深入地进入设置视图,然后进入注销视图。此注销应该将用户带回登录视图(不是导航控制器的一部分)。它适用于此代码:
let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)
但是登录视图会在顶部显示导航栏,它不应该这样做,也许我应该使用除self.navigationController!.pushViewController
以外的其他内容?
答案 0 :(得分:72)
SWIFT:您应该使用展开segue。
首先,在您的FirstViewController
中添加以下一行:
@IBAction func prepareForUnwind(segue: UIStoryboardSegue) { }
该功能实际上并没有任何代码。
LogoutViewController
创建一个展开segue。像这样:答案 1 :(得分:26)
如果您有导航控制器,请使用控制器:
self.navigationController?.popToRootViewControllerAnimated(true)
答案 2 :(得分:25)
如果您正在使用故事板,请查看放松信号。
您只需在控制器中创建要导航到的导航选项:
@IBAction func unwindToMe(segue: UIStoryboardSegue){}
然后从故事板创建segue。
当您需要导航回来时,只需使用您刚刚创建的展开segue标识符调用performSegue
方法。
如果你只想从代码中做到这一点,那么你可以写下类似的内容:
let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login")
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController
在这种情况下,您将应用程序设置为初始状态。
答案 3 :(得分:10)
试试吧
self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
这将使您回到应用程序流程的开头。
已更新为 Swift 4 (感谢@javaBeast)
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
答案 4 :(得分:0)
我建议你从一个ViewController到另一个ViewController制作一个segue,而不是像那样推送你的ViewController。
首先,你需要从你的第一个ViewController到你的登录ViewController的Ctrl + clic,然后在属性检查器中你给它一个标识符。
然后,你所要做的就是:
self.performSegueWithIdentifier("yourIdentifier", sender: self)
现在,对于导航栏,我建议您从登录视图中删除导航控制器,并将其与您的第一个视图相关联。它会从登录视图中删除导航栏。
答案 5 :(得分:0)
timer_create
是转到导航控制器的第一个控制器的最佳选择 然后关闭导航控制器