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