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

时间:2017-07-13 14:33:47

标签: ios swift3 uiviewcontroller childviewcontroller

我有一个主VC(称为VC A),它有一个子VC(VC B)。当我点击VC B上的一个按钮时,我将其视为子VC,但是一旦完成,我想实例化另一个VC(VC C)。我这样做是通过在VC B上创建一个bool,如果为true,则在VC A上调用一个创建新子VC(VC C)的函数。正在进行所有函数调用,但VC C永远不会被添加。下面我添加了代码:

VC B:

 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 A:

  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)
            }

2 个答案:

答案 0 :(得分:2)

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

的现有实例

您必须在添加Viewcontroller A

时传递Viewcontroller B个实例

Viewcontroller A

  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.
             }
           }

     }

答案 1 :(得分:1)

  

让instVC = UIStoryboard(名称:“Main”,bundle:nil).instantiateViewController(withIdentifier:“MainViewController”)为! MainViewController

这一行创建(实例化)MainViewController的一个新实例,它不是你当前显示的MainViewController。

您需要维护对第一个MainViewController的引用(可能通过访问主窗口上的rootViewController。并将新的popover添加到该窗口。