iOS: How to get pointer to navigation controller
I'm obviously missing something...
In my iOS app, I push a UIViewController onto a navigation controller:
MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController"];
[self.navigationController mvc animated:YES];
MyViewController displays fine, and I can see and use the navigationBar, but when I try to get a pointer back to the navigation controller from within my view controller, I get a nil result.
开发者_开发问答UINavigationController *nav = [self navigationController];
if (!nav) {
NSLog(@"no nav");
}
I've been beating my head against this all day, but can't see that I'm doing anything wrong. I get no warnings or errors in Xcode. Am I completely missing something?
TIA: john
The navigationController
won't be set properly on viewDidLoad
. You have to check it in viewDidAppear
or at some later stage. Which method are you calling to [self navigationController]
in?
The reason for this is that when viewDidLoad
is called, the UINavigationController
is still processing the pushViewController:animated:
method. It would appear to set the navigationController
property after it initialises the controller's view
. I can't recall whether the property is set by the time viewWillAppear
runs, but it should definitely be set by viewDidAppear
.
id rootViewController = [[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] nextResponder];
精彩评论