嵌套的UIViewController需要推送到根UINavigationController

时间:2010-11-22 22:47:29

标签: iphone uiviewcontroller uinavigationcontroller

我有一个带有UINavigationController的应用程序,它包含一个根UIViewController子类(PagingViewController),它管理并充当水平分页UIScrollView的委托。在这个UIScrollView的每个页面上,都有一个垂直滚动的UITableView,每个都由它自己的UIViewController子类(PageViewController)管理。它看起来像这样......

UINavigationController
  PagingViewController (root VC of navigation controller)
    PageViewController (instance 1)
    PageViewController (instance 2)
    PageViewController (instance 3)

  HowToPushThisViewController (this is what I'd like to push onto the current root, PagingViewController, from one of its sub view controllers)

我想做的是,在PageViewController(UITableView委托)的didSelectRowAtIndexPath:方法中,将新的UIViewController推送到UINavigationController(在PagingViewController之上)。

问题是PageViewController的navigationController属性是nil,所以我不能把它推到那里。我假设这是nil,因为它不是直接在UINavigationController的堆栈上,而是包含由PagingViewController在堆栈上 。在将每个PageViewController添加到PagingScrollView之前,我尝试设置每个PageViewController的navigationController属性,但它似乎只读(UINavigationController如何自行设置?)。

我觉得嵌套的UIViewControllers是健全的架构(每个都需要管理并充当其视图的委托),并且想要从子控制器推送导航是合理的,所以我不确定最佳实践用于从嵌套控制器访问和推送。希望有一些简单的东西我可以忽略访问并推送到根导航控制器。

1 个答案:

答案 0 :(得分:2)

要做的逻辑事情是设置页面视图控制器的parentViewController属性,但唉,它也是只读的。 Apple不鼓励视图控制器的自定义层次结构(除了带有标签栏,导航和拆分视图控制器的受支持层次结构)。

在您的情况下,我将在parentVC类上定义一个自定义PageViewController属性,PagingViewController在实例化其子项时将其设置为自身。然后PageViewController可以通过

进入导航控制器
self.parentVC.navigationController