Alex Rivera | Logout

How can I dismiss two modal view controller in succession *with animation*?

Asked 2011-07-19T03:29:31.227
11

Yes, I know there's exactly same question, but I want to do this with double dismiss animation. How to Dismiss 2 Modal View Controllers in Succession?

my code is same as question above,

view controller A (in navigation controller) - modal view controller B - modal view controller C

here's pseudo code

notification to B (as delegate)      // I changed order of this two lines, 
dismiss C *without* animation    // but it was same. 

(notification from C, in B)
dismiss B *with* animation

If I use animation when I dismiss C, it doesn't work, B will not be dismiss, because dismiss animation of C is playing.

Problem is: I can't start another dismiss animation if there's animation playing.

Can I play dismiss animation in succession?

This is not only problem of dismiss animation, it can be also applied to other iOS animations.

P.S: I think I can use timer to wait until first animation ends, but it is dirty and not stable way, isn't it?

Small Talk: In my program,

  • A: article list view
  • B: write article view
  • C: login view (if user is not logged in)

today, I have to add join view, I have to dismiss 3 views in time lol how can I help this?

Edit
Report

3 Answers

24

iOS 5.0 and higher:

[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

This works if you have:

A - starting view controller
M1 - modally presented by A
M2 - modally presented by M1

Put that line of code in M2's view controller class (and a button or whatever to activate it), and it will "reach up" through the hierarchy and tell A to dismissViewControllerAnimated:...

However,Rahul Vyas's answer is probably a better approach for cases where you have an unknown number of modal view controllers stretching between "A" and the last Modal view.

answered 2013-03-05T04:09:22.740
0

You can use [self dismissModalViewControllerAnimated:(BOOL)] when you want the view to dismiss the modal view. If you call this in both controllers it should work. I have not tried it myself but it seems logical.

I must add that if you need to present multiple modal views in a row maybe you should consider using different paradigms for some of them. For example, the login view could be an alertview instead of a modal view controller.

answered 2011-07-19T11:01:40.053
0

I've run into similar types of issues trying to get animations to work in succession. I've been meaning to try the following:

what if you put the call for the second animation (i.e. to dimiss B) inside a call to performSelectorOnMainThread? That would make me think the second animation would be forced to wait for the first to complete.

I haven't tested it yet though. Good luck - I'm very curious about what solution you come up with.

answered 2011-09-15T15:08:03.337

Your Answer