从 Child 开始 ViewController

Segueing from Child ViewController

我有一种情况,我将子视图控制器 "B" 呈现到另一个视图控制器 "A" 上。 View controller "B" 有 5 个按钮,这些按钮可以 segue(push)到第三个 view controller,"C"。问题是一旦我在视图控制器 "C",我希望能够使用展开转场从 C-->A 开始,而 B 不会出现在中间。

    // view controller A class

    class AViewController: UIViewController {        

            @IBAction func goToViewControllerB(_ sender: UIButton) {
                   let viewControllerB = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "viewControllerB_ID") as! BViewController
                   self.addChild(viewControllerB)
                   viewControllerB.view.frame = self.view.frame
                   self.view.addSubview(viewControllerB.view)
                   viewControllerB.didMove(toParent: self)
           }

           @IBAction func unwindToStart(segue: UIStoryboardSegue) {
                  print("back from view controller C!")
           }

   }

   //view controller B class

   class BViewController: UIViewController {

           override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
                  if let identifier = segue.identifier {
                        switch identifier {
                              case "segueFromBToC_1":
                                    if let destVC = segue.destination as? CViewController {
                                        //pass data
                                    }
                              // ... cases 2-4
                              case "segueFromBToC_5":
                                    if let destVC = segue.destination as? CViewController {
                                        //pass data
                                    }
                              default: break
                         }                   
                  }
          }

    }

    // empty CViewController class

我知道将以下代码放入我的视图控制器 B class 会将其从父视图控制器 "A" 中删除,但我无法从 "B" 继续到 "C" 因为 "B" 不存在。

   self.view.removeFromSuperview()
   self.removeFromParent()
   self.willMove(toParent: nil)

我想知道我应该把上面的代码放在哪里,或者我是否应该从子视图控制器开始?我也没有使用过导航控制器,因为我不知道如何使用子视图控制器来实现它们。我是否应该为 5 个按钮中的每一个设置 @IBAction 个插座并将上面的代码放在那里?

更新:我能够通过从按钮上分离 5 个推送 segue 并让 5 个推送 segue 中的每一个直接从视图控制器 B 到视图控制器 C 来修复它。然后我为每个按钮都有一个 @IBAction,在视图控制器 B 中有以下代码:

class BViewController: UIViewController {

       @IBAction func button1ToVC3(_ sender: UIButton) {
          segueAndRemoveSelf(segueName: "segueFromBToC_1")
      }

      @IBAction func button2ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_2")
      }

      @IBAction func button3ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_3")
      }

      @IBAction func button4ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_4")
      }

      @IBAction func button5ToVC3(_ sender: UIButton) {
         segueAndRemoveSelf(segueName: "segueFromBToC_5")
      }

       override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
              if let identifier = segue.identifier {
                    switch identifier {
                          case "segueFromBToC_1":
                                if let destVC = segue.destination as? CViewController {
                                    //pass data
                                }
                          // ... cases 2-4
                          case "segueFromBToC_5":
                                if let destVC = segue.destination as? CViewController {
                                    //pass data
                                }
                          default: break
                     }                   
              }
      }

}

extension BViewController {
    func segueAndRemoveSelf(segueName: String) {
        self.performSegue(withIdentifier: segueName, sender: self)
        self.view.removeFromSuperview()
        self.removeFromParent()
        self.willMove(toParent: nil)
    }
}

虽然不确定这是否是最佳做法。