如何返回Swift中的初始视图控制器?

时间:2015-05-05 12:10:43

标签: swift uinavigationcontroller pushviewcontroller

所以我有一个登录视图,在成功登录后,它会转到导航控制器的第一个视图,然后用户可以更深入地进入设置视图,然后进入注销视图。此注销应该将用户带回登录视图(不是导航控制器的一部分)。它适用于此代码:

let loginViewController = self.storyboard!.instantiateViewControllerWithIdentifier("Login") as? LoginViewController
self.navigationController!.pushViewController(loginViewController!, animated: true)

但是登录视图会在顶部显示导航栏,它不应该这样做,也许我应该使用除self.navigationController!.pushViewController以外的其他内容?

6 个答案:

答案 0 :(得分:72)

SWIFT:您应该使用展开segue。

  1. 首先,在您的FirstViewController中添加以下一行:

    @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
    
    }
    

    该功能实际上并没有任何代码。

    1. 现在,转到您的故事板并通过控件从黄色按钮拖动到“退出”按钮,为LogoutViewController创建一个展开segue。像这样:
    2. control-dragging in action

      1. 选择为FirstViewController创建的展开segue。

      2. 更改segue标识符:

      3. selected segue

        changing the identifier of the segue

        1. 转到LogoutViewController的代码并正常调用unwind segue:

          self.performSegueWithIdentifier("unwindToViewController1", sender: self)
          

          Swift 4

          self.performSegue(withIdentifier: "unwindToViewController1", sender: self)
          

答案 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

是转到导航控制器的第一个控制器的最佳选择 然后关闭导航控制器