YunDaeHyeon
← Lab

Container ViewController

스터디2025.07.28
  • UIKit
  • MVC

📌 Container View Controller

Creating a custom container view controller | Apple Developer Documentation

[iOS] Container View Controller 란? :: Back to Basics

May 20, 2021, TIL (Today I Learned) - Container View Controller

_“Container view controllers promote better encapsulation by separating out your content from how you display that content onscreen. Unlike a content view controller that displays your app’s data, a container view controller displays other view controllers, arranging them onscreen and handling navigation between them.”

”컨테이너 뷰 컨트롤러는 콘텐츠와 해당 콘텐츠를 화면에 표시하는 방식을 분리하여 더 나은 캡슐화를 지원합니다. 앱의 데이터를 표시하는 콘텐츠 뷰 컨트롤러와 달리, 컨테이너 뷰 컨트롤러는 다른 뷰 컨트롤러를 표시하고, 화면에 배치하고, 뷰 컨트롤러 간 이동을 처리합니다.”

  • 공식문서 Overview_

Container ViewController는 하나 이상의 자식(ViewController) 의 컨텐츠(뷰)를 자신의 뷰 계층 구조에 포함하고, 관리하는 컨트롤러를 의미한다.

  • 여러 개의 ViewController를 보유한다.
  • 화면 전환, 배치, 네비게이션 등 여러 화면을 조합하거나 관리하는 역할을 담당한다.
  • ⭐ 직접적인 UIContainerViewController와 같은 클래스가 있는게 아니다!
  • UIKit에서 기본적으로 제공하는 System Contianer View Controller가 있다.
  • 대표적으로 아래와 같은 컨테이너 역할을 수행하는 컨트롤러가 존재한다.
  • TabBarController
  • NavigationController
  • SplitViewController
  • PageViewController
  • 이들은 추후 더 깊게 학습할 예정이다.
  • UIViewController를 상속받아 컨테이너 역할을 수행하도록 설계 할 수 있다.
  • Custom Container View Controller를 만들 수 있다!
  • 컨테이너는 자신이 관리하는 자식 VC와 부모-자식 관계를 맺는다.
  • 그 후 자식 VC의 뷰를 자신의 뷰 계층에 추가한다.
  • addChild(_:)나 didMove(toParent:)등의 API를 통해 관계를 맺는다.

좀 더 쉽게 이해해보자면, View Controller는 View를 관리하는 컨트롤러의 역할이다. 이벤트를 관리하거나 데이터를 화면에 보여주는 등 MVC 구조 에서 C의 역할을 수행한다.

Container View Controller는 직접적으로 View를 보여주는 게 아니라, 자식 VC간에 부모-자식 관계를 형성해 자식을 관리하는 컨테이너이다.

📌 주요 System Container VC

UINavigationController | Apple Developer Documentation

UINavigationController | Apple Developer Documentation

UITabBarController | Apple Developer Documentation

UISplitViewController | Apple Developer Documentation

UISplitViewController | Apple Developer Documentation

UIPageViewController | Apple Developer Documentation

컨트롤러역할 및 관계
NavigationController여러 VC를 스택(stack) 구조로 관리하고, Push/Pop 방식 화면 전환을 제공한다.
각 화면(VC)은 스택에 쌓여서 계층적으로 이동한다.
NavigationVC 자체가 ContainerVC이며, 자식 VC들을 관리한다.
TabBarController각각의 탭(tab)에 대해 별도의 자식 VC를 갖고, 탭마다 독립적인 뷰 계층을 제공합니다.
여러 VC 중 하나만 활성화되어 보여집니다.
SplitViewController주로 iPad에서 사용되며, Master(Primary)와 Detail(Secondary) 컨텐츠를 나란히 보여준다.
각 영역에 VC를 자식으로 할당해 동시에 관리가 가능하다.
PageViewController여러 VC를 페이지 단위로 스와이프(좌우 또는 상하) 전환할 수 있도록 관리한다.
주로 온보딩 화면이나 책/카탈로그 뷰에 활용됩니다.