为什么self.navigationController = nil来自方法

时间:2010-10-18 12:14:05

标签: uinavigationcontroller ios4 pushviewcontroller

由于某种未知的原因,我不能推动观点,我会尽力解释我能做到的最好但是我有很多复杂的观点正在进行中,这将是一个噩梦来解释但是说我有以下方法。

 -(void)showDetailView{ 
DetailViewController *detailView = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
 [self.navigationController pushViewController:detailView animated:YES];
 [detailView release]; 
  }

哪个有效并将详细视图推送到堆栈,这是在我的主视图和我的主线程上。

因此在表格视图中,我有一个带有Subview的单元格,然后从另一个视图控制器获取其视图。在该视图控制器中,我有更多子视图,并说当用户单击子视图时调用方法。而这又将在mainView上调用此方法。

所以人们会相信新的观点应该被推动。并且代码运行,不会发生错误,但视图不会更改/切换。

我尝试过在视图控制器内部推送视图的各种方法。然后只需调用一个直接连接到导航控制器的方法来推送视图。

要添加的一些内容。 1.我有一个推动视图的IBAaction按钮(工作正常) 2.我假设它是因为我通过这么多的视图,但我假设如果你调用推视图控制器,它将推送你传递它的任何视图。 3.我已经检查过从主视图调用方法时self.navigationcontroller不是= null。

但是如果通过方法调用导航控制器,则调用it = null。

那么还是要恢复导航控制器的空值吗?

我有点困惑为什么我不能简单地调用方法来推送视图

由于

2 个答案:

答案 0 :(得分:1)

确定我现在已经对它进行了分类

就我如何解决访问高级超级视图而言,我的观点是

视图superview的ID标记,该视图是我的子视图所在的单元格

id CellController = [self.view.superview.superview nextResponder];
[CellController performSelector:@selector(showDetailView:) withObject:Link];

然后在我的单元格中调用一个方法,然后再访问其超级视图

id mainController = [self.view.superview.superview nextResponder];
[mainController performSelector:@selector(showDetailView:) withObject:Link];

然后主要仍保留其导航控制器,然后在主要的show detail方法中传递链接并推送新视图。

基本上,子视图的总超级视图不能高于创建它的任何地方。因此,我的单元格中的子视图永远无法通过我的mainView正确访问和运行任何东西,我可以填充,但它从未执行过它应该如何。因此,访问其最高级别的超级视图,然后在单元格位于我的主视图中时访问其超级视图,然后我可以正确运行方法。

希望这只有理解我的头脑。

感谢 - > How does one access a super's view controller?

对于Id标记位,不以这种方式使用Id,因此学习了另外的东西

答案 1 :(得分:1)

我今天遇到了几乎相同的问题。如果在推送视图时隐藏了导航栏,则可能是零导航控制器。我解决了这个问题:

self.navigationController.navigationBarHidden = NO; // So the navigation controller is not nil
[self.navigationController pushViewController:articleInfoController animated:YES];