开发者

iOS: How to get pointer to navigation controller

开发者 https://www.devze.com 2023-04-12 03:52 出处:网络
I\'m obviously missing something... In my iOS app, I push a UIViewController onto a 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];
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号