Scenario:
1. Show navigation controller based view
2. User select option
3. Show modal view A
4. User select another option in modal view A
5. Hide modal view A
6. Show modal view B
// This function must show modal view A
This scenario implemented like this:
- (IBAction)showModalViewA:(id)sender {
ModalViewA *viewA = [[ModalViewA alloc] forParent:self];
[self presentModalViewController:viewA animated:YES];
[viewA release];
}
// This function must hide modal view A and show modal view B
- (void)didSelectOptionInViewA {
ModalViewB *viewB = [[ModalViewB alloc] init];
viewB.peoplePickerDelegate = self;
[self dismissModalViewControllerAnimated:NO]; // Problem Is Here
[self presentModalViewController:viewB animated:YES];
[viewB release];
}
Please look at line marked as // Problem Is Here
When I set the dismissModalViewControllerAnimated:NO it works fine.
If this parameter is YES then viewB did not appear on the screen.
How to make it works with animation?
The animation will take some time, something like 0.3 seconds. You cannot see when the animation has finished (no delegate methods are being sent) so you can do 2 things:
I really wonder why you would want to do such a thing, because this is really not very Apple-ish. You'd better present the new modal view over the old modal view or you try to find another design pattern which solves the problem properly, which would be even better.