2017-04-12 12 views
1

私はViewController1で開くアプリケーションを作成しています。その後、ボタンがモーダルセグの別のビューコントロールラー(ViewController2)を開きます。次に、ViewController2には別のモーダルセグを使用して別のView Controller(ViewController3)を開くボタンがあります。 2人と3人のView Contollersの両方にView Controllerを閉じるDismissボタンがあります。モーダルセグメントでView Controllerを終了する

問題は、ViewController3がdismissボタンを使用するたびに、ViewController1に却下したいときにViewController 2を閉じることです。私はボタンを押したViewController2を却下するためにdismissアクションを使用しようとしましたが、segueはコミットされません。

これは混乱を招く可能性がありますので、理解が必要な場合は質問してください。アドバイスで本当にありがとう!

(私はスウィフト3とXcode 8を使用しています)

+0

)、あなたが戻ってviewcontroller1ないviewcontroller2に行きたいです。それは正しい? –

+0

@iOSFreakはい – iFunnyVlogger

答えて

0

これが起こるuはそれが1つ下に移動し、トップでのViewControllerを閉じたときに、すべての3のViewControllerは、スタック内にあるため。私の頭の上から

if let viewcontroller1 = navigationController?.viewControllers[0]{ 
    _ = navigationController?.popToViewController(viewcontroller1, animated: true) 

     } 
+0

ありがとうございました。コードは次のようになります。self.navigationController?.popToViewController(ViewController1、animated:true)私はエラーが発生しました "期待された引数型 'UIViewController'" – iFunnyVlogger

+0

@ iFunnyVlogger私は答えを編集して、見てください – Anuraj

0

つのオプション: 1.通知センターとViewController2がViewController3上parentViewController参照を設定 2.のために待機している却下通知を送信し、そして - :viewcontroller1使用に移動し その後、親を却下した後、親に対して却下を呼び出す。

+0

ちょっと、ちょっと!回答ありがとうございます!私はスウィフトにとっては新しく、まだ学んでいるので、そのうちの1つをどうやって私を導くことができますか?あなたができなければ、私は完全にそれを手に入れます!しかし、とにかく、ありがとう! – iFunnyVlogger

0

それは簡単です!

 //*** in ViewController2 
    NotificationCenter.default.addObserver(self, selector: #selector(ViewController.onCloseViewController2), name: NSNotification.Name(rawValue: "closeViewController2"), object: nil) 

    func onCloseViewController2() { 
//this function is called from notification (sent by vc3) 
    self.navigationController?.dismiss(animated: true, completion: nil); 
} 

@IBAction func closeView2FromButton() { 
//Directly close modal 
    self.onCloseViewController2(); 
} 


     //*** in ViewController3 (tap button) 
    @IBAction func closeView3FromButton() { 
//dismiss vc3 and send a notification to vc2 
      self.navigationController?.dismiss(animated: true, completion: { 
     NotificationCenter.default.post(name: NSNotification.Name(rawValue: "closeViewController2"), object: nil); 
    }); 
} 

あなたのコードでそれらを必要としないとき、後にオブザーバーを削除することを忘れないでください、あなたはviewcontroller3のボタンを却下タップすると私の理解は、正しいかどう

関連する問題