0

Is it possible to detect which 'UIViewController' has been popped in the root view controller? I have 3 view controllers, A->B->C. Both B and C have popping actions. Is it possible to detect whether it was B or C was popped in A?

DevC
  • 6,982
  • 9
  • 45
  • 80
  • You can set it by simple `NSUserDefaults` flag, that would be easiest way to do things like this. – Viral Savaj Apr 20 '15 at 10:41
  • You can use `NSNotificationCenter` OR `NSUserDefaults` for this. – Yogesh Suthar Apr 20 '15 at 10:41
  • I would set A controller as a **UINavigationControllerDelegate** and implement: *- navigationController:willShowViewController:animated:* or *- navigationController:didShowViewController:animated:* – DanielS Apr 20 '15 at 10:44
  • 2
    @DanielS Assuming you want to look at the navigation stack in those methods, it won't work. When `navigationController:willShowViewController:animated:` gets called, the navigation stack (navigationController.viewControllers) is already modified. (In the case of popToRoot, only the rootViewController will be in it). – Lord Zsolt Apr 20 '15 at 10:49
  • @LordZsolt yes, you're right. My mistake. – DanielS Apr 20 '15 at 12:07

1 Answers1

1

I much rather prefer using delegate for this over something likfe NSNotificationCenter or NSUserDefaults.

You define a protocol, which has a method like this:

- (void)willPopToRootFromViewController(UIViewController *)fromViewController;

You implement this method in A, and the other view controllers call this method before popping.

You can find a complete example on how to implement a delegate here.

Community
  • 1
  • 1
Lord Zsolt
  • 6,492
  • 9
  • 46
  • 76