2010-11-22 89 views
3

我有一個UINavigationController的應用程序,它包含一個根UIViewController子類(PagingViewController),它管理和充當水平分頁UIScrollView的代理。在這個UIScrollView的每個頁面上,都有一個垂直滾動的UITableView,每個UITableView都由它自己的UIViewController子類(PageViewController)管理。它看起來是這樣的......嵌套的UIViewController需要推到根UINavigationController

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) 

我希望做的是,在didSelectRowAtIndexPath方法:在PageViewController(UITableView的委託)的方法,推動了新的UIViewController到UINavigationController的(在PagingViewController的頂部)。

問題是PageViewController的navigationController屬性爲零,所以我不能將它推到那裏。我認爲這是零,因爲它不直接在UINavigationController的堆棧上,但包含的PagingViewController,其中在堆棧上。我嘗試在將每個PageViewController的navigationController屬性添加到PagingScrollView之前設置它的navigationController屬性,但它似乎是隻讀的(UINavigationController如何設置它自己?)。我覺得嵌套的UIViewControllers是健全的體系結構(每個人都需要管理和充當其視圖的委託),並且想要從子控制器中推導導航是合理的,所以我不確定最好的練習從嵌套控制器訪問和推送。希望有一些簡單的東西可以忽略,可以訪問並推送到根naviagtion控制器。

回答

2

合乎邏輯的事情是設置頁面視圖控制器的parentViewController屬性,但是,它也是隻讀的。 Apple不鼓勵視圖控制器的自定義層次結構(除了帶標籤欄,導航和分割視圖控制器的支持層次結構外)。

就你的情況而言,我將在PageViewController類上定義一個自定義parentVC屬性,PagingViewController在實例化其子級時將其設置爲自身。然後PageViewController可以通過

self.parentVC.navigationController 
+0

或者,覆蓋`-parentViewController`。這似乎允許一些UIViewController魔術工作,包括(我認爲)-navigationController。伊西,不過! – 2010-11-23 04:33:47

相關問題