Ios 如何返回登录ViewController

Ios 如何返回登录ViewController,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,当用户启动应用程序时,我将检查身份验证状态,并显示不同的ViewControler 登录->主ViewController->将根据用户操作推送ViewController或presentViewController 需要登录->登录ViewController->主ViewController->将根据用户操作推送ViewController或presentViewController 我的问题是,当用户想要注销时,如何返回登录ViewController 方法一: 当前ViewControl

当用户启动应用程序时,我将检查身份验证状态,并显示不同的ViewControler

登录->主ViewController->将根据用户操作推送ViewController或presentViewController

需要登录->登录ViewController->主ViewController->将根据用户操作推送ViewController或presentViewController

我的问题是,当用户想要注销时,如何返回登录ViewController

方法一:

当前ViewController->presentViewController/pushViewController登录ViewController

问题:以前的ViewController仍在内存中

方法二:

当前视图控制器->PoptorootViewController激活->当前视图控制器/推送视图控制器登录视图控制器

问题:如果用户以前登录,RootViewController将是主ViewController,我们无法使用该方法释放主ViewController

方法三:

[[[[UIApplication sharedApplication] delegate] window] setRootViewController:signinNavigationController];

问题:没有动画,并且上一个ViewController仍在内存中。

您可以在情节提要中使用“展开序列”。有关更多详细信息,请参阅此链接:

在程序上, 按注销按钮时,调用appDelegate函数:

func showLoginController() {
    //For Story board use this line
    var loginController:LoginViewController = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle()).instantiateViewControllerWithIdentifier("loginViewControllerIdentifier") as! LoginViewController
    //for xib file use this line
    var loginController:LoginViewController = UINib(nibName: "loginViewController", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as? LoginViewController

    AppDelegate.sharedAppDelegate().window?.rootViewController = loginController
}

您可以从signinNavigationController(NavigationController)堆栈中删除以前的viewcontroller

说成

NSMutableArray*navArray=[[NSMutableArray alloc]initWithArray:self.navigationController.ViewController]

//这只是为了从导航堆栈中删除所有视图控制器。 [navArray removeObjectAtIndex:0]

//然后再次将堆栈添加到导航堆栈


self.navigationController.ViewController=navArray

使用情节提要和展开片段。2015年了@Cy-4AH,谢谢你的建议,但我不得不说我的申请已经太迟了…谢谢,但我的申请中没有使用情节提要。谢谢,我已经更新了我的问题,请查看