In Short : How can I PushViewController from Presented ViewController ?
In Brief :
I have MainViewController
, In which I have one button on click of button, I am presenting a view called LoginViewController
.
On this page (LoginViewController
), I again have button
, on click of that, I try to push my view controller(called HomeViewController
) it doesn't pushes.
Here is my code snippet,
MainViewController.m
- (IBAction)LoginClicked:(id)sender {
LoginViewController *vc = [[LoginViewController alloc] init];
[self presentViewController:vc animated:YES completion:nil];
}
LoginViewController.m
- (IBAction)buttonActionMethodOnLoginView:(id)sender{
NSLog(@"viewControllers %@",APPDELEGATE.nav.viewControllers);
//LoginViewController is not in this array
HomeViewController *obj = [[HomeViewController alloc] init];
[self.navigationController pushViewController:obj animated:YES];
}
But it did not works for me. Also, I printed a stack of view controllers
before pushed
, but it doesn't have LoginViewController
. So, without adding LoginViewController
into a stack of view controllers
, How can I pushed
to HomeViewController
from LoginViewController
?
When I getBack from HomeViewController
, then LoginViewController
should get opened..
Is it possible using doing this single NavigationController
?
Note:- Here, I have just taken an example using Login, Home and Main ViewController. But I want that into Other Screens.
You can't push from a presented view controller. I suggest, you should maintain your navigation hierarchy.
For that, from your MainViewController, you should present LoginViewController and you should pass navigation controller for the MainViewController.
Then inside LoginViewController, you should push to HomeViewController like this,
By doing this, it will be look like, you're pushing from LoginViewController but in reality you're pushing from MainViewController.
You can customize this approach to maintain animation and UI for this flow.
hi when you are Presenting you Login view controller Just present a navigationController like:
Now your PresentedViewController is An navigtioncontroller now you can simply push to your Home VC
Hope it will helpful for you
For Swift 3.0
Present your view controller as a new rootViewController
Now push your view controller from presented view controller
MainViewController.m
LoginViewController.m
Create a UINavigationController instance
[[UINavigationController alloc] initWithRootViewController:[[LoginViewController alloc] init]]
Present that navigationController and then push whatever VC you want to.
You have to
Push
from your firstView (MainViewController
), but you can use animation same asPresentView
andDismissView
. Use following code for this :-For Push (on
MainViewController
)For Pop (on
LoginViewController
)Using this code, you can get animation same as
Present-Dismiss ViewControllers
. Refer this answer for more details.And after that, you can use your code for
Pushing
LoginViewController
toHomeViewController
Hope, this is what you're looking for. Any concern get back to me. :)