在pushViewController之后,UIViewController的UINavigationController是nil

时间:2014-03-03 11:20:39

标签: ios objective-c uinavigationcontroller pushviewcontroller

我在导航菜单中使用ECSlidingViewController,每当我想从此菜单中推送UIViewController时,推送UINavigationController的{​​{1}}始终为零

初始化UIViewControllerUINavigationController输出显示以下NSLog地址。当我调用方法<UINavigationController: 0x8a80770>时,pushViewController:animated被推送但UIViewController为零,因此我无法在此控制器中看到UINavigationController

以下是我正在使用的代码段:

UINavigationBar

RecommendationsViewController *rvc = [self.storyboard instantiateViewControllerWithIdentifier:@"RecommendationsViewController"]; [self.transitionsNavigationController pushViewController:rvc animated:NO]; self.slidingViewController.topViewController = rvc; viewDidLoad get初始化时(请注意transitionNavigationController来自github https://github.com/ECSlidingViewController/ECSlidingViewController上的ECSlidingViewController项目,类型为slidingViewController):

ECSlidingViewController

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

我认为你误解了这是怎么回事。

UINavigationController必须是topViewController

推送后不要重新分配topViewController。通过这样做:

self.slidingViewController.topViewController = rvc;

所有要做的就是设置当前窗口以显示UIViewController,这就是为什么你没有看到导航栏,应用程序需要显示UINavigationController,而UIViewController依次管理UIViewController

列表

导航控制器处理一堆viewControllers,只需推送新的{{1}}而不是其他

答案 1 :(得分:0)

有一个相关问题,导航控制器的topViewController将忘记它附加到navigationController。

我的故事板设置是: - &gt; NavigationController-&gt; ViewController NavController和ViewController之间的连接是&#34;根视图控制器&#34;。 我为每个视图控制器设置了storyboardID。

我有一个视图管理类&#34; ViewManager&#34;包含对所有故事板视图的弱引用,我使用它来获取:

_rootNC = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"NavController"];
//ViewController gets auto-attached to the NavController, and so viewController.navigationController == NavController

_firstVC = [self.mainStoryboard instantiateViewControllerWithIdentifier:@"ViewController"];
//Instantiating the ViewController again clears its navigationController property, and so viewController.navigationController == nil

我认为通过重新实现视图,我不应该通过故障排除实例获得挂钩。我很感激,如果其他人分享他们的最佳实践,以获得对storyboard viewControllers的弱引用,我可以在一个viewManager类中控制它们。 (我倾向于从NavigationController的viewDidLoad中设置viewManager.rootNC。