Search code examples
swiftxcodeuipageviewcontroller

How to delete the last instantiated ViewController and the last TableViewController becomes active


I instantiated a PageViewController and display images.

let storyboard = UIStoryboard(name: "Main", bundle: nil)
    self.pageViewController = storyboard.instantiateViewController(withIdentifier: "articlePageViewController") as! UIPageViewController
    self.pageViewController.dataSource = self
    let initialContenViewController = self.pageTutorialAtIndex(0) as ArticleImageViewController
    self.pageViewController.setViewControllers([initialContenViewController], direction: UIPageViewControllerNavigationDirection.forward, animated: true, completion: nil)



    self.pageViewController.view.frame = CGRect(x: 0, y: 0, width: Int(self.view.frame.width), height: Int(self.view.frame.height))
    self.pageViewController.view.center = self.mainView.center
    self.pageViewController.view.tag = 100
    self.addChildViewController(self.pageViewController)
    self.view.addSubview(self.pageViewController.view)
    self.pageViewController.didMove(toParentViewController: self)

Picture in ImageView:

Picture in ImageView

Now I want to delete the Pageviewcontroller and go back to the Maintableview with tapped on the button. Here is the code from tapped the button.

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

The images are deleted and the Maintableviewcontroller ist displayed but not active. When i display the view UI hierarchy the pageviewcontrollercontentview is in the front.

viewhierarchy:

viewhierarchy

How I can delete it and go back to the Maintableviewcontroller?


Solution

  • Simple though, you added pageviewcontroller as:

    self.addChildViewController(self.pageViewController)   //===> Step 1
    self.view.addSubview(self.pageViewController.view) //additional step required while adding
    self.pageViewController.didMove(toParentViewController: self)   //===> Step 2
    

    Try:

        [self.pageViewController removeFromParentViewController];    //===> Reverse of Step 1
        [self.pageViewController didMoveToParentViewController:self];//===> Reverse of Step 2
    

    Call from PageViewController would be like:

        [self removeFromParentViewController];    //===> Reverse of Step 1
        [self didMoveToParentViewController:self.parentViewController];//===> Reverse of Step 2