2017-01-07 13 views
0

を却下、私はそれがこのようになります。ストーリーボードではモーダル別のビューコントローラB.ショーのViewControllerと最初

を提示1つのビューコントローラ「A」を持っている:

UIViewController "A" -> UINavigationViewController "B" -> rootViewController" "C" 

私の目標が提示することですBと隠すA、どうすればそれを達成できますか?

AViewController

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "showSomething" { 
      if let destination = segue.destination as? UINavigationController { 
       if let viewController = destination.viewControllers.first as? CViewController { 
        viewController.delegate = self 
       } 
      } 
     } 
    } 

CViewController A.私はCでプロパティを設定しようと、そこにAを消すが、私はCを却下するので、それは、働いていないと左

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate.dismiss(animated: false) 
    } 

答えて

0

表示されているView Controllerを終了すると、自動的にディスカードされます提示されたView Controllerをその階層に表示します。彼らは次のようになり、ABルートのViewControllerですAC

は、あなたが3 ViewControllersを持っていることを考える、それがより明確にする

A => B => C 

現在の提示のViewControllerがB、あると仮定します - 私がそれを得た場合Cを提示し、Bを同時に却下したいと思っています。私が述べたように、ViewController(この例ではB)を却下すると、階層内のViewController(この例ではC) 。

は、おそらくそれはあなたが次の動作を行いたい場合は、あなたが達成したいものではありません:、AからBへの移動

CからBとするときCを閉じ、私は表示せず、Aに行きたいですB

あなたが実装することにより、これを行うにはCのViewControllerを聞かせする必要があります。

presentingViewController?.presentingViewController?.dismiss(animated: true, completion: nil) 

これはAに戻って直接(Bです)Cの現在の提示のViewControllerのプレゼンターとを解任する原因となります。

この詳細については、this answerをチェックしてください。

これが役に立った。そう、私の携帯電話から回答

// call this from A 
dismiss(animated: false) { 
    // completion closure 
    self.presentingViewController.present(cViewController, animated: true) 
} 

:それはあなたが最初のを解任しなければならないC.を提示しているので、あなたがAを却下することはできません

0

、その後、このようにC.を提示する提示ビューコントローラを使用しますおそらくコンパイルするためにいくつかの修正が必要です。

関連する問題