web-dev-qa-db-fra.com

Comment supprimer le ChildViewController du contrôleur de vue parent dans Swift 3

Je développe une application IOS. J'ai ajouté la UIViewController dans View Pager. Je veux le réinitialiser lorsque la langue est changée. Ici, je veux supprimer tous les enfants UIViewController de UIViewPager et à nouveau pour ajouter tous UIViewController dans Viewpager. Comment puis je faire ça?

Exemple de code

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

Swift 3.1

xcode 8.3.3

11
Noorul

Après la longue recherche pour supprimer les contrôleurs de vue de viewpager. Je l'ai fait de la manière suivante.

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

uIViewController actuel qui a View Pager. Je dois supprimer tous les contrôleurs de vue enfant du pager de vue. Donc, je reçois la liste des contrôleurs de vue de UIViewController actuel Ensuite, je l'ai supprimé de la vue Parent. 

39
Noorul

Swift 4.2, XCode 10, ios 12, 2018 Réponse

self.children.forEach{$0.willMove(toParent: nil);$0.view.removeFromSuperview();$0.removeFromParent()}

J'espère que c'est utile à quelqu'un

0
Prashant Tukadiya

Mise à jour pour Swift 4

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

Pour ajouter viewController:

 let forgetPasswordVc = ForgetPasswordViewController()
    self.addChild(forgetPasswordVc)
    self.view.addSubview(forgetPasswordVc.view)
    forgetPasswordVc.didMove(toParent: self)

Pour supprimer (à l'intérieur du ForgetPasswordViewController):

self.removeFromParent()
self.view.removeFromSuperview()
0
Zouhair

Swift 4.2

créer extension sur UIViewController et ajouter la méthode removeChild()

extension UIViewController {

    func removeChild() {
        self.children.forEach {
            $0.didMove(toParent: nil)
            $0.view.removeFromSuperview()
            $0.removeFromParent()
        }
    }
} 
0
Suhit Patil