Reputation: 425
I have a problem with unwinding my view to login screen. The storyboard structure is as follow: Storyboard Structure
The user flow for the app is as follow: user login on LoginVC-> goes to main tab bar screen by modal segue-> on each tab bar item, I added right bar button on the navigation controller to access profile page, each tab bar item has independent navigation controller to keep the nav controller structure linear. -> once i click profile page button, profile page is presented modally -> when logout button on profile page is clicked, it triggers unwind segue and dismiss view controller
func logoutUser(){
//Networking.logoutUser()
print("It goes to login")
self.performSegue(withIdentifier: "unwindToLogin", sender: self)
}
The unwind segue was implemented on LoginVC on the leftmost VC.I connected unwind segue on the profile screen and call it "unwindToLogin" I simply used performSegueWithIdentifier. However, the method does not get called and nothing happen to the view.
Edit 1: Im wondering since i call profile page modally on tab bar vc, it couldnt find the unwindtologin. If i simply use the instantiateviewcontoller to call login, will it clear my view controller stack ?
Edit 2: Sorry, i forgot that when i check if a user is logged in, i use the code below:
if (FIRAuth.auth()?.currentUser != nil) {
self.storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "TabBarViewController")
}
So actually they can't find the unwind method because the root view is not main login view controller.
Can anyone help ?
Upvotes: 3
Views: 3317
Reputation: 154583
You need to create the unwind segue on every ViewController that you want to call it on. They can all use the same @IBAction
destination in the login screen and they can all be called "unwindToLogin"
.
I see the unwind segue defined on the MainTabBarController
. In your UserProfileController
, you need to control-drag from the view Controller icon to the Exit icon and then select your @IBAction
in the pop up. Then find that unwind segue in the UserProfileController
in the Document Outline and make its identifier "unwindToLogin"
.
In response to your Edit 2:
Since your initial viewController was put into place programmatically, it isn't possible to unwind to the LoginViewController
. In this case,
put the landing @IBAction
in your MainTabBarController
and have it set the self.window?.rootViewController
to the login screen.
Upvotes: 1
Reputation: 1054
Move to any View controller using unwind segue.
For moves to any view controller when you clicking a button.
- (IBAction)unwindToCurrentController:(UIStoryboardSegue *)unwindSegue { }
Now Build and run your app. It works perfectly.
Upvotes: 3
Reputation: 37
You could try this it Worked for me.
[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
I use it to dismiss a modal view so that I can return to the originating view.
Upvotes: -1