2010-11-22 10 views
3

私は、水平ページングUIScrollViewのデリゲートを管理し、その役割を果たすルートUIViewControllerサブクラス(PagingViewController)を含むUINavigationControllerを持つアプリケーションを持っています。このUIScrollViewの各ページには、垂直にスクロールするUITableViewがあり、それぞれ独自のUIViewControllerサブクラス(PageViewController)で管理されています。 PagingViewControllerの上にPageViewController(のUITableViewデリゲート)の方法は、UINavigationControllerに新しいのUIViewControllerを押して(:それはこのような何か...私が何をしたいのですがどのようなネストされた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のnavigationControllerプロパティがnilなので、そこにプッシュできません。私はUINavigationControllerのスタックに直接ではないのでこれがゼロであると仮定しますが、はがであるPagingViewControllerによってを含んでいます。私はPagingScrollViewにそれを追加する前に各PageViewControllerのnavigationControllerプロパティを設定しようとしましたが、読み込み専用のようです(どのようにUINavigationController自体が設定されていますか?)。

入れ子になっているUIViewControllerは健全なアーキテクチャです(それぞれのビューのデリゲートを管理し、その役割を果たすために必要です)。サブコントローラからナビゲーションをプッシュすることは妥当です。ネストされたコントローラにアクセスしてプッシュする練習。うまくいけば、私はルートnaviagtionコントローラにアクセスしてプッシュすることを見落としている何か簡単です。

答えて

2

論理的なことは、ページビューコントローラのparentViewControllerプロパティを設定することですが、あまりにも読み取り専用です。 AppleはView Controllerのカスタム階層を奨励していません(タブバー、ナビゲーション、分割ビューコントローラでサポートされている階層以外)。

あなたの場合、私は、クラスのカスタムparentVCを定義します。PagingViewControllerは、その子をインスタンス化するときに自分自身に設定されます。 PageViewControllerは、

self.parentVC.navigationController 
+0

経由でnavコントローラにアクセスできます。あるいは、-parentViewControllerをオーバーライドします。これは、(私が思う)-navigationControllerを含むいくつかのUIViewControllerの魔法を働かせるようです。しかし、Icky! –

関連する問題