我在导航菜单中使用ECSlidingViewController
,每当我想从此菜单中推送UIViewController
时,推送UINavigationController
的{{1}}始终为零
初始化UIViewController
,UINavigationController
输出显示以下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
感谢您的帮助!
答案 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。