Container ViewController
- 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를 페이지 단위로 스와이프(좌우 또는 상하) 전환할 수 있도록 관리한다. |
| 주로 온보딩 화면이나 책/카탈로그 뷰에 활용됩니다. |