2016-05-05 7 views
1

を提示し得るのUIViewControllerに私はUINavigationController

NAVIGATIONController A -> ViewController A -> ViewController B 
                | 
                | (modal) 
                | 
               \/
                ' 
             NAVIGATIONController B -> ViewController C 

を持ってどのようにどのように私はCから戻ってViewControllerをAに行くのですか?

私はViewControllerをCにいるとき、私は別のコントローラ値を印刷しようとした:

print(self.navigationController) //NAVIGATIONController B 
print(self.navigationController?.presentingViewController) //UINavigationController (not sure what this is? It is not one of my classes) 
print(self.navigationController?.presentedViewController) //nil 
print(self.presentingViewController) //The same UINavigationController (still not sure...) 
print(self.presentedViewController) //nil 

私はこのラインself.navigationController?.dismissViewControllerAnimated(true, nil)で、MyViewController Cから戻っMyViewController Bへ行く方法を知っているが、私は行くことを求めていますCからAへ:-)

NAVIGATIONController Bの前のものにアクセスするにはどうすればよいですか?

+0

あなたが戻って1つのビューコントローラから以前に1を表示し、 "アンワインドsegues" を使用してに見に行きたい場合 - そのあなたのプレゼンテーション階層の知識をViewController Cにエンコードする必要はありません。 –

+0

これはiOS9のみですが、iOS8のサポートが必要です。 – Kalzem

+0

コントローラCからのpopToViewの使い方は?私はコントローラBにのみ却下することができますが、私はAに行くコントロールがありません(Cからのすべて)。私はNavController Bを提示して(したがってCを表示する)、フラグが有効になっているとviewDidAppearをチェックするときにtrueに設定したBにフラグを作成したくないです...きれいに見えません。 – Kalzem

答えて

1

UINavigationControllerself.navigationController?.presentingViewControllerは、「NAVIGATIONController A」にする必要があります。

Cからできることは、self.navigationController?.presentingViewControllerの "NAVIGATIONController A"を取得し、popToRootViewController(これは非対応)を呼び出します。

次に、「ViewController C」(およびそのnavコントローラ)をself.navigationController?.dismissViewControllerAnimated(true, nil)で閉じます。

このように、「ViewController C」を終了すると、最上位のnavコントローラはすでに「ViewController A」を表示しています。

+0

ありがとう!それは完璧に動作します:)ここに私の完全なコードです: '(!?UINavigationControllerなどself.navigationController .presentingViewController).popToRootViewControllerAnimated(偽)' 'self.navigationController .dismissViewControllerAnimated?(本当、完了:ゼロ)' – Kalzem

0

popToViewControllerを使用できます。

[self.navigationController popToViewController:yourviewcontroller animated:YES];

これは、あなたのビューコントローラに到達するまでビューコントローラをポップします。 これが役立つことを願っています。 CSceneのbuttonActionで

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.noti), name: "popAndDismiss", object: nil) 
} 
func noti() { 
     navigationController?.popViewControllerAnimated(true) 
    } 

:BSceneさんのviewDidLoadで

+0

このdoesnのは、モーダルで作業していません... – Kalzem

0

@IBAction func click(sender: AnyObject) { 
    NSNotificationCenter.defaultCenter().postNotificationName("popAndDismiss", object: nil, userInfo: nil) 
    navigationController?.dismissViewControllerAnimated(true, completion: nil) 
} 
関連する問題