webentwicklung-frage-antwort-db.com.de

So entfernen Sie den ChildViewController aus dem Parent View Controller in Swift 3

Ich entwickle eine IOS -Anwendung. Ich habe die UIViewController in View Pager hinzugefügt. Ich möchte es neu initialisieren, wenn die Sprache geändert wird. Hier möchte ich alle Kinder UIViewController von UIViewPager entfernen und wieder zurück, um alle UIViewController in Viewpager hinzuzufügen. Wie kann ich das machen?

Beispielcode

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

Swift 3.1

xcode 8.3.3

11
Noorul

Nach der langen Suche entfernen Sie die View-Controller vom Viewpager. Ich habe es auf folgende Weise gemacht.

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

hier ist selbst, Current UIViewController, der View Pager hat. Ich muss alle Childview-Controller aus dem View-Pager entfernen. Ich bekomme die Liste der View-Controller von Current UIViewController. Dann entfernte ich es aus der übergeordneten Ansicht. 

39
Noorul

childViewControllers.forEach({ $0.willMove(toParentViewController: nil); $0.view.removeFromSuperview(); $0.removeFromParentViewController() })

Diese Antwort gilt für Swift 4.2 und höher ist weniger als 4.2 Versionen.

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

Hier ist die übersichtlichere Version zum Entfernen aller untergeordneten Controller vom übergeordneten Controller. Mit self.childViewControllers können Sie explizit definieren. Bei diesem Ansatz können Sie diese zusätzlichen Bedingungen loswerden, um sie zu überprüfen.

10
Rehan Ali

Swift 4.2, XCode 10, iOS 12, 2018 Antwort

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

Hoffe, es ist jemandem hilfreich

0

Update für 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

ViewController hinzufügen:

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

So entfernen Sie (im ForgetPasswordViewController):

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

Swift 4.2

erstellen Sie extension für UIViewController und fügen Sie die removeChild()-Methode hinzu

extension UIViewController {

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