IOSアプリケーションを開発しています。ViewPagerにUIViewController
を追加しました。言語が変更されたときに再初期化する必要があります。ここですべての子UIViewController
からUIViewPager
に戻り、すべてのUIViewController
をViewpagerに再度追加します。
サンプルコード
let viewPager = ViewPagerController()
viewPager.options = options
viewPager.dataSource = self
viewPager.delegate = self
self.addChildViewController(viewPager)
Swift 3.1
xcode 8.3.
長い検索の後、viewpagerからView Controllerを削除します。私は次の方法でそれをしました。
if self.childViewControllers.count > 0{
let viewControllers:[UIViewController] = self.childViewControllers
for viewContoller in viewControllers{
viewContoller.willMove(toParentViewController: nil)
viewContoller.view.removeFromSuperview()
viewContoller.removeFromParentViewController()
}
}
ここでselfは、View Pagerを持つ現在のUIViewControllerです。ビューページャーからすべてのchildviewコントローラーを削除する必要があります。だから、私は現在のUIViewControllerからView Controllerのリストを取得します。次に、親ビューから削除しました。
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()
}
}
childViewControllers.forEach({ $0.willMove(toParentViewController: nil); $0.view.removeFromSuperview(); $0.removeFromParentViewController() })
この答えはSwift 4.2であり、上記のものは4.2バージョン未満です。
children.forEach({ $0.willMove(toParent: nil); $0.view.removeFromSuperview(); $0.removeFromParent() })
以下は、親からすべての子コントローラーを削除するためのより簡潔なバージョンです。 self.childViewControllersを使用して明示的に定義できます。このアプローチとして、チェックするこれらの余分な条件を取り除くことができます。
ViewControllerを追加するには:
let forgetPasswordVc = ForgetPasswordViewController()
self.addChild(forgetPasswordVc)
self.view.addSubview(forgetPasswordVc.view)
forgetPasswordVc.didMove(toParent: self)
削除するには(ForgetPasswordViewController内):
self.removeFromParent()
self.view.removeFromSuperview()
Swift 4.2、XCode 10、ios 12、2018 Answer
self.children.forEach{$0.willMove(toParent: nil);$0.view.removeFromSuperview();$0.removeFromParent()}
それが誰かに役立つことを願っています
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()
}
}
Swift 4.2
extension
にUIViewController
を作成し、removeChild()
メソッドを追加します
extension UIViewController {
func removeChild() {
self.children.forEach {
$0.didMove(toParent: nil)
$0.view.removeFromSuperview()
$0.removeFromParent()
}
}
}