According to the docs, the delegate is called just before the navigation controller displays a viewController’s
view and navigationItem
properties.
But, it appears that your question is, "how?".
In your Storyboard or somewhere in code, the UINavigationController
is set up. Wherever that is, it has a delegate property (a variable). That property is set to some object that implements the UINavigationControllerDelegate
protocol.
For example:
MySpecialViewController *myViewController = [[MySpecialViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:myViewController];
navigationController.delegate = self;
Now, whenever that navigationController
is about to present a view controller, the navigationController:willShowViewController:animated:
delegate method will be called on your object.