如何删除 VC 然后直接添加另一个 VC

How to remove a VC then add another VC directly afterward

我有一个 Main VC(称之为 VC A),它有一个 child VC(VC B)。当我在 VC B 上点击一个按钮时,我将其视为 child VC,但是一旦完成,我想实例化另一个 VC (VC C ).我通过在 VC B 上创建一个 bool 来做到这一点,如果为真,则在 VC A 上调用一个函数,该函数创建一个新的 child VC (VC C) .所有的函数调用都在进行,但是 VC C 从未被添加。下面我添加了代码:

VC乙:

 func removeAnimate()
{

    self.willMove(toParentViewController: nil)
    self.view.removeFromSuperview()
    self.removeFromParentViewController()

    didTransition = true

    if didTransition == true {
       callAddVC()
    }

}

func callAddVC() {
    let instVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainViewController") as! MainViewController

    instVC.addVC()
}

VC答:

  func addVC () {


    let popvc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CommentsTabViewController") as! CommentsTabViewController

    self.addChildViewController(popvc)
    popvc.view.center = self.view.center

    popvc.view.bounds.size = CGSize(width: 337, height: 503)

    self.view.addSubview(popvc.view)

    popvc.didMove(toParentViewController: self)
            }

let instVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainViewController") as! MainViewController

此行创建(实例化)您的 MainViewController 的新实例,它不是您当前显示的 MainViewController。

您需要维护对第一个 MainViewController 的引用(可能通过访问主 window 上的 rootViewController。并向其添加新的弹出窗口。

您正在 callAddVC() 上创建 ViewController A (MainViewController) 的新实例,这是错误的。您没有使用 ViewController A

的现有实例

您必须在添加 Viewcontroller B

时传递 Viewcontroller A 实例

Viewcontroller一个

  let viewControllerB = // Get the instance of UIViewControllerB from storyboard
  viewControllerB.vcA = self

Viewcontroller B

  class UIViewControllerB {
        weak var vcA: UIViewControllerA?

         func removeAnimate() {

              self.willMove(toParentViewController: nil)
              self.view.removeFromSuperview()
              self.removeFromParentViewController()

              didTransition = true

             if didTransition == true {
               vcA.addVC(). //You have to call addVC() by using the reference of the main view controller.
             }
           }

     }