如何返回Swift中的初始视图控制器?
所以我有一个登录视图,成功登录后,它会进入导航控制器的第一个视图,然后用户可以深入到设置视图,然后进入注销视图。此注销应将用户带回登录视图(该视图不是导航控制器的一部分)。它适用于以下代码:如何返回Swift中的初始视图控制器?,swift,uinavigationcontroller,pushviewcontroller,Swift,Uinavigationcontroller,Pushviewcontroller,所以我有一个登录视图,成功登录后,它会进入导航控制器的第一个视图,然后用户可以深入到设置视图,然后进入注销视图。此注销应将用户带回登录视图(该视图不是导航控制器的一部分)。它适用于以下代码: let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController self.navigationController!.pushViewCon
let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)
但是登录视图在顶部显示导航栏,它不应该这样做,可能除了
self.navigationController!。按下我应该使用的ViewController?我建议您从一个ViewController切换到另一个,而不是像那样按下ViewController
因此,首先,需要从第一个ViewController到登录的ViewController按Ctrl+clic组合键,然后在属性检查器中为其指定一个标识符
那么,你所要做的就是:
self.performSegueWithIdentifier("yourIdentifier", sender: self)
现在,对于导航栏,我建议您从登录视图中删除导航控制器,并将其与第一个视图相关联。它将从您的登录视图中删除导航栏。如果您正在使用故事板,请查看“展开”分段
您只需在控制器中创建要导航到的“展开”选项:
@IBAction func unwindToMe(segue: UIStoryboardSegue){}
然后从故事板创建segue
当您需要返回时,只需使用刚刚创建的展开序列标识符调用performsgue
方法
如果您只想从代码中执行,那么您可以编写如下内容:
let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login")
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController
在这种情况下,您将把应用程序设置为初始状态。SWIFT:您应该使用一个展开序列
首先,在FirstViewController
中放入以下行:
@IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
}
Swift 4
self.performSegue(withIdentifier: "unwindToViewController1", sender: self)
self.performsgue(标识符为“unwindToViewController1”,发送方为self)
如果您有导航控制器,请从控制器使用:
self.navigationController?.popToRootViewControllerAnimated(true)
试试看
这将使您回到应用程序流程的开始
更新至Swift 4(感谢@javaBeast)
是转到导航控制器的第一个控制器的最佳选项
然后关闭导航控制器就像一个魔咒,然后你非常much@matt第二种变体更适合使用。它更加自信,而且你不是从故事板上创建控制器。这绝对是第一次完美无瑕的最佳答案,这在开发人员的生活中是非常罕见的。这个答案对Xcode 8和Swift 3仍然有效。效果很好!谢谢你的完美!我仍然困在这个问题上。。。当用户登录时,如何解决此问题,然后在NSUserdefaults中设置一个令牌,这样他就不必再次登录,将来某个时候他会决定注销?当我尝试这种方法时,“登录”屏幕不再在控制器堆栈中,因为我在应用程序启动时跳过了这个屏幕,所以我无法打开登录屏幕。请帮忙!我不相信这和他想做的事有什么关系。。。因为如果您使用Identifier执行GuegueWithIdentifier,您将向窗口堆栈添加一个新窗口。。。不返回到第一个视图控制器。。最好的答案是由Allan提供的答案简单、准确、最好肯定是最好和最简单的答案。在swift 4中,使用self.navigationController?.popToRootViewController(动画:true)对我来说效果很好,因为我有3个不同的视图,在这之间我有2个导航控制器。在找到10个对我不起作用的其他解决方案后,这一个终于起作用了,谢谢!为SWIFT 4更新:self.view.window?.rootViewController?.disclose(动画:true,完成:nil)
这是我在SWIFT 5中唯一有效的解决方案。非常感谢你!
self.navigationController?.popToRootViewControllerAnimated(true)
self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
self.view.window?.rootViewController?.dismiss(animated: true, completion: nil)
self.navigationController?.popToRootViewController(animated: true)