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

mat*_*att 35 uinavigationcontroller pushviewcontroller swift

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

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

但登录视图显示顶部的导航栏,它不应该这样做,可能还有self.navigationController!.pushViewController我应该使用的东西吗?

All*_*eld 77

SWIFT:您应该使用展开segue.

  1. 首先,将以下行放在您的FirstViewController:

    @IBAction func prepareForUnwind(segue: UIStoryboardSegue) {
    
    }
    

    该函数实际上没有任何代码.


  1. 现在,转到您的故事板并LogoutViewController通过控制拖动从黄色按钮到退出按钮创建一个展开的segue .像这样:

控制 - 拖动行动

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

  2. 更改segue标识符:

选择了segue


更改segue的标识符

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

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

    斯威夫特4

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


Vas*_*mil 27

如果您正在使用故事板,请查看放松信号.

您只需要在控制器中创建展开选项,您希望导航到:

@IBAction func unwindToMe(segue: UIStoryboardSegue){}
Run Code Online (Sandbox Code Playgroud)

然后从故事板创建segue.

当您需要导航回来时,只需performSegue使用刚刚创建的展开segue标识符调用该方法.

如果你只想从代码中做到这一点,那么你可以写下这样的东西:

let loginViewController = self.storyboard?.instantiateViewControllerWithIdentifier("Login")
UIApplication.sharedApplication().keyWindow?.rootViewController = loginViewController
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您将应用程序设置为初始状态.


Ren*_*rez 25

如果您有导航控制器,请从您的控制器使用:

self.navigationController?.popToRootViewControllerAnimated(true)
Run Code Online (Sandbox Code Playgroud)

  • 在 swift 4 中,使用 self.navigationController?.popToRootViewController(animated: true) (2认同)

小智 13

试试吧

    self.view.window?.rootViewController?.dismissViewControllerAnimated(true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

这将使您回到应用程序流程的开头.

更新到Swift 4(感谢@javaBeast)

    self.view.window?.rootViewController?.dismiss(animated: true, completion: nil) 
Run Code Online (Sandbox Code Playgroud)


小智 0

我建议您从一个 ViewController 到另一个 ViewController,而不是像那样推送 ViewController。

因此,首先,您需要从第一个 ViewController 按住 Ctrl + clic 到您的登录 ViewController,然后在属性检查器中为其指定一个标识符。

然后,您所要做的就是:

    self.performSegueWithIdentifier("yourIdentifier", sender: self)
Run Code Online (Sandbox Code Playgroud)

现在,对于导航栏,我建议您从登录视图中删除导航控制器,并将其关联到您的第一个视图。它将从您的登录视图中删除导航栏。