Pushing a navigation controller after a modal view controller is presented
Asked Answered
A

2

7

I have a tab view controller which has a button like so and when it gets pressed a modal appears:

PostViewController *post = [[PostViewController alloc] init];

// [self.navigationController pushViewController:post animated:YES];

// Presentation
[self presentViewController:post animated:YES completion:nil];

When the modal is done I want to dismiss it and push a new view controller like so:

ProfilesViewController *profile = [[ProfilesViewController alloc] init];
[self.navigationController pushViewController:profile animated:YES];

But I can't do it in the post vc as its a modal. How do I do this?

Animatism answered 9/10, 2014 at 8:12 Comment(1)
Why do you need to present something and dismiss it before even appearing?Evzone
A
7

You can try using completionBlock.

CompletionBlock is called when presentViewController is done.

PostViewController *post = [[PostViewController alloc] init];
[con presentViewController:post animated:YES completion:^{
    ProfilesViewController *profile = [[ProfilesViewController alloc] init];
    [self.navigationController pushViewController:profile animated:YES];
}];

More information about presentViewController:animated:completion: Apple Doc

completion : The block to execute after the presentation finishes. This block has no return value and takes no parameters. You may specify nil for this parameter.

Algonquin answered 9/10, 2014 at 8:15 Comment(5)
Okay so it pushes it behind the modal?Animatism
It pushes into the navigationController stack.Algonquin
If you want dismiss your modal before, you can add dismissViewControllerAnimated:completion: using the completionBlock tooAlgonquin
One more question, once I dismiss post can the post data be displayed in the ProfilesViewController? So does the profile view controller run when it becomes visible?Animatism
When you dismiss a ViewController, it releases all data inside. So you must provide all args you want to keep to the new VC. Hope this answer your questionAlgonquin
L
1

Dose your tab view controller embedded in a UINavigationController? If you have not, you of course cannot use self.navigationController.

Lundell answered 9/10, 2014 at 8:16 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.