본문 바로가기

iOS

[iOS] Custom ContainerViewController 활용시 주의할 점

ChildViewController로 추가/제거 될 때 willMove, didMove 메소드가 자동으로 호출됩니다.

코드로 ContainerViewController를 구현했다면 child를 추가할 땐 didMove, 제거할 땐 wilMove 메소드를 직접 호출해주어야 합니다.

트랜지션도 커스텀했다면 트랜지션이 종료된 후 적절한 시점에 메소드를 호출해주면 됩니다.

참고로, child를 제거할 때 didMove가 자동으로 중복되어 호출될 수 있습니다.

 

func addChild() {
    let viewController = ChildViewController()
    addChildViewController(viewController)
    
    // addChild 후 호출, 커스텀 트랜지션이 있다면 완료 후에 호출
    viewController.didMove(toParentViewController: self)
    
    viewController.view.frame = containerView.bounds
    containerView.addSubview(viewController.view)
}

func removeChild() {
    for viewController in childViewControllers {
        // 루트 뷰를 계층에서 제거하기 전에 호출
        viewController.willMove(toParentViewController: nil)
        
        viewController.view.removeFromSuperview()
        viewController.removeFromParentViewController()
    }
}