web-dev-qa-db-ja.com

Swift 3で親View ControllerからChildViewControllerを削除する方法

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.

14
Noorul

長い検索の後、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()
        }
    }
50
Noorul

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を使用して明示的に定義できます。このアプローチとして、チェックするこれらの余分な条件を取り除くことができます。

10
Rehan Ali

ViewControllerを追加するには:

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

削除するには(ForgetPasswordViewController内):

self.removeFromParent()
self.view.removeFromSuperview()
3
Zouhair Sassi

Swift 4.2、XCode 10、ios 12、2018 Answer

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

それが誰かに役立つことを願っています

2

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()
        }
    }
1
user1872384

Swift 4.2

extensionUIViewControllerを作成し、removeChild()メソッドを追加します

extension UIViewController {

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