Ios UIViewController的UINavigationController在pushViewController之后为nil
我正在使用Ios UIViewController的UINavigationController在pushViewController之后为nil,ios,objective-c,uinavigationcontroller,pushviewcontroller,Ios,Objective C,Uinavigationcontroller,Pushviewcontroller,我正在使用ECSlidingViewController作为我的导航菜单,每当我想从此菜单中按下UIViewController时,按下的UIViewController的UINavigationController总是为零 UINavigationController初始化后,NSLog输出显示以下地址。当我调用方法pushViewController:animated时,UIViewController被推送,但UINavigationController为nil,因此我无法在该控制器中看到
ECSlidingViewController
作为我的导航菜单,每当我想从此菜单中按下UIViewController
时,按下的UIViewController
的UINavigationController
总是为零
UINavigationController
初始化后,NSLog
输出显示以下
地址。当我调用方法pushViewController:animated
时,UIViewController
被推送,但UINavigationController
为nil,因此我无法在该控制器中看到UINavigationBar
以下是我用于此目的的代码片段:
RecommendationsViewController *rvc = [self.storyboard instantiateViewControllerWithIdentifier:@"RecommendationsViewController"];
[self.transitionsNavigationController pushViewController:rvc animated:NO];
self.slidingViewController.topViewController = rvc;
在viewdiload
中,transitionNavigationController
get被初始化为(请注意slidingViewController
来自github上的ECSlidingViewController项目,类型为ECSlidingViewController
):
谢谢你的帮助 我想你误解了这是怎么回事
UINavigationController
必须是topViewController
推送后不要重新分配topViewController
。通过这样做:
self.slidingViewController.topViewController = rvc;
所要做的就是将当前窗口设置为显示UIViewController
,这就是为什么您没有看到导航栏,应用程序需要显示UINavigationController
,这反过来将管理UIViewController
的列表
导航控制器处理一堆视图控制器,只需按下新的
UIViewController
,无需其他操作存在一个相关问题,导航控制器的topViewController会忘记它已连接到navigationController
我的故事板设置是:->NavigationController->ViewController
NavController和ViewController之间的连接是“根视图控制器”。
我已经为每个视图控制器设置了情节提要ID
我有一个视图管理类“ViewManager”,它包含对所有情节提要视图的弱引用,我使用以下方法获得:
_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
我认为不应该通过重新实例化视图来获得故事板实例的挂钩。如果其他人能分享他们获取情节提要ViewController弱引用的最佳实践,我将不胜感激,因为我可以在一个viewManager类中控制它们。(我倾向于在NavigationController的viewDidLoad中设置viewManager.rootNC)。请发布代码的您部分您没有为
self.transitionNavigationController添加代码。
停止代码的滴灌输入行。同样,self.slidingViewController.topViewController来自哪里。把所有的代码都贴上去,直到我们看到一个“[[alloc]init]”,你问为什么它为零,并且不会告诉我们你在哪里分配它。问题似乎与情节提要,self.slidingViewController有关。topViewController
必须是UINavigationController
,因此,我猜不可能推送一个正常的UIViewController
,我现在解决了这个问题,在情节提要中将属性仅设置为UINavigationController
。不要忘记标记顶部答案,并对解决问题的任何答案进行上选。其他面临同样问题的人会想知道是什么解决了你的问题,那些花时间回答你问题的人应该得到代表点什么是UINavigationViewController
?当我执行此操作时,self.slidingViewController.topViewController=rvc
会推动UIViewController
,但没有导航栏。我想不可能将UIViewController
设置为topViewController,它必须是UINavigationController
@user1463853,这是我的一个打字错误,显然我指的是UINavigationController
。请再读一遍我的答案,你所做的只是发表你最后的评论,我的答案也是回应。多亏了你可爱的帮助,我可以找到解决这个问题的方法。我现在将topViewController转换为UINavigationController
如下UINavigationController*navC=(UINavigationController*)self.slidingViewController.topViewController
然后按下UIViewController
效果非常好:[navC pushViewController:[self.storyboard instanceeviewcontrollerwhiteIdentifier:@“RecommendationsViewController”]动画:是]代码>@user1463853是的,看起来差不多正确。很高兴我帮了忙。别忘了将我的答案标记为“最佳答案”并向上投票,这样其他人就会知道它在面对同一问题时已修复,我会得到修复的代表分数。我不确定你是否对我的问题或其他人投了否决票?如果是这样,请取消否决票,因为你能够回答这个问题。
_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