dismissViewControllerAnimated is called but ViewController is not dismissed

I am having a problems with the dismissViewControllerAnimated method not closing down the view.

What is happening in the app here is:

  • Cell in ItemViewController is selected.
  • View is pushed to ItemDetailViewControllerand details are sent through a delegate
  • User selects 'done' and the event is sent via a delegate to be closed in ItemViewController

All of this works except for the View is not dismissed, there are no errors. Can anyone see what is wrong?

- (void)itemDetailViewControllerDidFinish:(ItemDetailViewController *)controller
{
    NSLog(@"Controller: %@", controller);
    // Returns - Controller: <ItemDetailViewController: 0x6b68b60>

    [self dismissViewControllerAnimated:YES completion:nil];
}

Answers


What if you call [controller.navigationController popViewControllerAnimated:YES] instead?

For that matter, what if you call [controller dismissViewControllerAnimated:YES completion:nil] instead of calling it on self?


The answer is in this page: dismissviewcontrolleranimated-vs-popviewcontrolleranimated

dismissViewController is used when you do not have a navigationcontroller. Most probably you are using a navigation controller, then use self.navigationController popViewController instead.

Also take note of lemax his remark: use NULL, not nill for the completionhandler


I had a problem in iOS5 where the standard completion callback was not allowing the view to completely dismiss (only the current pushed view of that modal)

[controller dismissViewControllerAnimated:YES completion:^ {
     //
 }];

Solution for iOS5 is to not have a callback:

[controller dismissViewControllerAnimated:YES completion:nil];

Had a problem where calling dismissViewControllerAnimated dismissed the keyboard in a UIViewController, but not the view itself.

Solved it by using two calls:

[self dismissViewControllerAnimated:NO completion:nil];
[self dismissViewControllerAnimated:YES completion:nil];

an instant one for the keyboard, then an animated one for the controller


Your Situation is - ItemViewController -> ItemDetailViewController (pushed on navigationController) Self.dismissViewController(..) dismiss a view controller that is presented over self(in ur case it is ItemViewController). Here, u did not presented any VC over self, instead u pushed a new VC over navigation stack. So, Correct way to dismiss ItemDetailViewController would be

self.navigationController.popViewController(true). please read the description of dismissViewController(....) to get more clarity.


Need Your Help

How to check null objects in jQuery

javascript jquery dom object null

I'm using jQuery and I want to check the existence of an element in my page. I have written following code, but it's not working:

How to turn off CalendarView in a DatePicker?

android android-layout

On my settings screen I have a date picker widget. In the designer in Eclipse, it shows as I want (3 spinners for D-M-Y) but when I test on my device, I get a rather odd view with a side spinner on...