【发布时间】:2013-08-25 16:34:16
【问题描述】:
在故事板中,我有一个介绍性的视图控制器,它会淡入 UINavigationController。
| | | |
-> | | -> | |
| | | |
ViewCtrl NavCtrl
我想从应用程序委托中获取对导航控制器的引用(就像 @Guillaume 答案在 this question 中所做的那样)。
这是我尝试访问它的方式:
UIApplication.sharedApplication.delegate.window.rootViewController.navigationController;
但是导航控制器是 nil。
任何概念为什么 navController 是 nil 或者我可以做些什么来获得对它的引用?
【问题讨论】:
-
您是否为 UINavigationController 设置了 Storyboard ID?如果没有,您应该在 Storyboard 中执行此操作。之后,您不需要所有这些来访问您的导航控制器。您只需要 [self.storyboard instantiateViewControllerWithIdentifier:@"myID"]。我假设你从你的视图控制器调用它。要访问您想要的导航控制器,只有当您的 rootViewController 在 UINavigationController 中时才有可能。
-
谢谢@rocir!这看起来很有希望。我唯一的反对意见是应该已经实例化了一个 UINavigationController,并且我想获得对那个的引用。我不认为我想实例化第二个导航控制器。
-
但是你这样做你不会成功,因为你的 rootViewController 不在 UINavigationController 中。此外,此时 UIViewController 尚未实例化。所以你有什么连接这两个视图控制器的segue?
-
尝试访问导航控制器的代码在一些控制器被推送到导航控制器之前不会运行(因此它将被实例化)。知道@Guillaume 如何在我在问题中链接到的示例中使用它吗?
-
据我所知,您无法从 ViewCtrl 访问它,因为它不在 NavCtrl 中。这可以在导航控制器内具有 rootViewController 的应用程序中工作。我不确定他的代码是否以这种方式工作。如果你真的想要这样做,我建议在 AppDelegate 中创建一个属性(如 navigationController),并在第一次初始化时设置它。之后,您只需访问此属性即可获取它。
标签: iphone ios objective-c uinavigationcontroller storyboard