添加子视图后,self.navigationController为nil

时间:2009-12-31 02:19:32

标签: iphone subview navigationcontroller

这是我的productscontroller.h

ProductListViewController *productListViewController;
ProductGridViewController *productGridViewController;
UIButton *flipIndicatorButton;  

我在我的实现中将list和gridview添加为这样的子视图

ProductListViewController *listController = [[ProductListViewController alloc] initWithNibName:@"ProductListView" bundle:nil];
self.productListViewController = listController;
self.productListViewController.CurrentSale = CurrentSale;
[self.view insertSubview:listController.view atIndex:0];

但当我试图从ProductListViewController.m推送detailview控制器时,就像这样

ProductDetailViewController *productDetailViewController = [[ProductDetailViewController alloc] init];

productDetailViewController.productIndexPath = indexPath;

[self.navigationController pushViewController:productDetailViewController animated:YES];

它只是不起作用,然后我检查[self.navigationController],它是零, 现在该如何处理这个问题。我准备提供更多代码和细节,以便更清楚。感谢

5 个答案:

答案 0 :(得分:2)

您在哪里创建导航控制器?在某些时候(可能在你的App代表中)你必须有这样的东西:

ProductsController *productsController = // create ProductsController
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:productsController];

然后将navController的视图作为子视图添加到您的窗口。

另一件事是你似乎在一个屏幕上使用了太多的View Controllers。 Apple建议每个屏幕只有一个。

答案 1 :(得分:1)

我最近遇到了同样的问题!我在视图控制器的viewWillAppear:方法中“poped”([self.navigationController popViewControllerAnimated:YES])viewController。所以我刚刚删除了这段代码并在viewDidAppear:方法中插入了相同的代码并且它有效!

答案 2 :(得分:0)

我找到了解决此问题的方法。 现在我正在做的是我传递父控制器的ref在这种情况下ProductsController和写入方法推送下一个视图。现在,我正在调用父方法来推送下一个这样的视图 [parent pushNextview]; 到目前为止它工作正常,希望这是做我想做的好方法。

答案 3 :(得分:0)

昨天我遇到了类似的问题:

Tab Bar View - Table View - View

在表格视图控制器中,我想推送“详细视图”控制器,但此处[self navigationController]nil。解决方案是采用这种安排:

Tab Bar View - Navigation View - Table View - View

使用附加的导航控制器,[self navigationController]现在可以在表视图控制器中使用。

答案 4 :(得分:0)

我刚刚发现为什么navigationController总是为零。您的整个视图系列应包含在UINavigationController中。这意味着层次结构中的第一个视图必须是rootViewController。 bpapas代码应该可以工作。