Search code examples
iosxcodeswift3

How to remove the ChildViewController from Parent View Controller in Swift 3


I am developing an IOS Application. I have added the UIViewController in View Pager. I want to reinitialize it when the language is changed. Here I want to remove all child UIViewController from UIViewPager and again back to add all UIViewController into Viewpager. How can I do that?

Sample Code

let viewPager = ViewPagerController()
viewPager.options = options
viewPager.dataSource = self
viewPager.delegate = self
self.addChildViewController(viewPager)

Swift 3.1

xcode 8.3.3


Solution

  • After the long search to remove the view controllers from viewpager. I did it in the following way.

     if self.childViewControllers.count > 0{
            let viewControllers:[UIViewController] = self.childViewControllers
            for viewContoller in viewControllers{
                viewContoller.willMove(toParentViewController: nil)
                viewContoller.view.removeFromSuperview()
                viewContoller.removeFromParentViewController()
            }
        }
    

    here self is , Current UIViewController which has View Pager. I need to remove all the childview controllers from the view pager. So, i get the list of view controllers from Current UIViewController. Then i removed it from the Parent view.

    For swift 4.2

     if self.children.count > 0{
            let viewControllers:[UIViewController] = self.children
            for viewContoller in viewControllers{
                viewContoller.willMove(toParent: nil)
                viewContoller.view.removeFromSuperview()
                viewContoller.removeFromParent()
            }
        }
    

    EDIT

    Remove top childview controller:

       func removeTopChildViewController(){
             if self.children.count > 0{
                 let viewControllers:[UIViewController] = self.children
                    viewControllers.last?.willMove(toParent: nil)
                    viewControllers.last?.removeFromParent()
                    viewControllers.last?.view.removeFromSuperview()
             }
         }