Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

viewWillDisappear not called when calling popToRootViewControllerAnimated

I work on a legacy application, and have found out, that my view[Will/Did]Disappear methods are not always fired properly.

The case is, I have a (custom) UIViewController set as rootViewController in AppDelegate. This rootViewController has a UINavigationController, which has two view controllers pushed on it. When the user presses the home button, the user is logged out. When he later returns to the app, the application calls [UINavigationController popToRootViewControllerAnimated:YES] and then displays a modal UIViewController for logging in.

The problem is: When I push/pop on the UINavigationController normally, my viewWillDisappear method is called properly. But when I use the popToRootViewControllerAnimated: method, viewWillDisappear is not called on any of the viewControllers that are popped off.

Searching on the internet has only given two possible reasons:

  • If using a UINavigationController as a subview, you must call view[Will/Did]Disappear yourself
  • Not calling the proper super methods

None of these suggestions are the case in my app. And I have no idea where to look. Anybody has a suggestion to what has been done wrong in the app?

like image 732
JRV Avatar asked Jul 30 '13 18:07

JRV


1 Answers

The view probably wasn't onscreen. It has to be onscreen (visible) for the viewWillDisappear: method to be called. If it's coming back from the background, it wasn't visible.

You could try using willMoveToParentViewController: which is called when the view controller is removed from its parent.

like image 81
nevan king Avatar answered Oct 21 '22 09:10

nevan king