【问题标题】:self.navigationController is nil after adding subview添加子视图后 self.navigationController 为零
【发布时间】:2009-12-31 02:19:31
【问题描述】:

这是我的 productscontroller.h

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

我在我的实现中添加列表和网格视图作为这样的子视图

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] ,它是零, 现在如何处理这个问题。我准备提供更多代码和细节以更清楚。谢谢

【问题讨论】:

  • 如果您使用的是导航控制器,为什么要插入子视图而不是将视图推送到控制器?另外,在插入子视图之前导航控制器是否也为零?
  • 感谢 Oren,不是 nil,让我说说我的应用程序结构。 TabBarController -NavigationControler --TableViewController ---ProductController(self.navigationControll is not null here) ----ListViewController(self.navigationControll is nil) ----GridViewControler(self.navigationControll is nil) ihope this make picture clear.
  • 我正在添加翻转视图按钮作为右键项目,它会被添加。我可以翻转视图,但我不能推动另一个视图控件。

标签: iphone subview navigationcontroller


【解决方案1】:

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

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

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

另一件事是您似乎在一个屏幕上使用了太多的视图控制器。 Apple 建议每个屏幕只使用一个。

【讨论】:

  • 感谢 bpapa,我每个屏幕只使用一个控制器,只是我不能在这里创建视图层次结构。我有标签栏,我在我的 Mainwindow.xib 中将第一个标签栏作为导航,我在 BrandList 控制器中创建 ProductController,这是我的第一个屏幕,而不是应用程序委托。这清楚吗。如果不让我知道如何使它更清楚。
  • 我按照这个例子来创建子视图(我做了同样的事情,只是做了一些小的改动)developer.apple.com/iphone/library/samplecode/TheElements/…,希望这会有所帮助
【解决方案2】:

我最近遇到了同样的问题!我在 viewController 的 viewWillAppear: 方法中“弹出”([self.navigationController popViewControllerAnimated:YES])viewController。所以我只是删除了这段代码,并在 viewDidAppear: 方法中插入了相同的代码,它工作了!

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      Tab Bar View - Table View - View

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

      Tab Bar View - Navigation View - Table View - View

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2016-05-02
          • 1970-01-01
          • 1970-01-01
          • 2012-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-13
          • 1970-01-01
          相关资源
          最近更新 更多