【问题标题】:iOS: How to get pointer to navigation controlleriOS:如何获取指向导航控制器的指针
【发布时间】:2011-10-11 22:53:47
【问题描述】:

我显然错过了什么......

在我的 iOS 应用中,我将 UIViewController 推送到导航控制器上:

MyViewController *mvc = [[MyViewController alloc] initWithNibName:@"MyViewController"];
[self.navigationController mvc animated:YES];

MyViewController 显示正常,我可以看到和使用导航栏,但是当我尝试从视图控制器中获取指向导航控制器的指针时,我得到一个 nil 结果。

UINavigationController *nav = [self navigationController];
if (!nav) {
    NSLog(@"no nav");
}

我整天都在为此苦苦挣扎,但看不出我做错了什么。我在 Xcode 中没有收到任何警告或错误。我完全错过了什么吗?

TIA:约翰

【问题讨论】:

    标签: ios uinavigationcontroller


    【解决方案1】:

    navigationController 将无法在 viewDidLoad 上正确设置。您必须在viewDidAppear 或稍后的某个阶段检查它。你在哪个方法中调用[self navigationController]

    原因是当viewDidLoad被调用时,UINavigationController仍在处理pushViewController:animated:方法。它似乎设置了navigationController 属性它初始化控制器的view。我不记得该属性是否在viewWillAppear 运行时设置,但绝对应该由viewDidAppear 设置。

    【讨论】:

    • 啊!当然。我敢打赌这就是问题所在。我正在初始化程序中检查它,这还为时过早。呸!谢谢你救了我可怜的脑袋!
    【解决方案2】:
    id rootViewController = [[[[[UIApplication sharedApplication] keyWindow] subviews] objectAtIndex:0] nextResponder];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多