Bibi's DevLog 🤓🍎
Container View Controller 컨테이너 뷰 컨트롤러 본문
Container View Controller 컨테이너 뷰 컨트롤러
ViewController의 두 종류
Content View Controller 컨텐츠 뷰 컨트롤러
- 일반적인 뷰 컨트롤러.
- 앱 내 데이터를 화면에 보여주는 등의 역할
- UIViewController를 직접 서브클래싱해 커스텀해 사용
Container View Controller 컨테이너 뷰 컨트롤러
- 여러 요소를 조합한 인터페이스를 구성
- 보통 무언가를 직접 보여주는 역할이 아니라, 뷰 컨트롤러 간에 부모-자식 관계를 형성하여 고유의 방식으로 자식을 관리하는 역할의 뷰 컨트롤러.
- 자식 뷰 컨트롤러들의 참조를 가지고 관리한다.
즉 Container View Controller가 Content View Controller들을 관리한다.
왜 Container View Controller를 쓰는가?
: navigation 로직을 분리하여 단일 책임원칙을 지키려는 시도이다.
"promote better encapsulation by separating out your content from how you display that content onscreen"
일반적인 MVC 패턴에서, 뷰 컨트롤러가 너무 많은 책임을 담당하게 되어 massive view controller가 되는 문제. (의존성 주입과 화면을 그리는 역할을 동시에 하는 등)
책임이 많으면 유지보수와 테스트가 어렵다
뷰 컨트롤러의 여러 책임 중 "화면에 표시해주는 책임"을 다른 객체로 분리해 낸 것이 컨테이너 뷰 컨트롤러이다.
Custom Container View Controller & System Container View Controller 커스텀 컨테이너 뷰 컨트롤러와 시스템 컨테이너 뷰 컨트롤러
UIContainerViewController같은 클래스는 없다. 컨테이너 뷰 컨트롤러는 하나의 개념일 뿐이다.
컨테이너 뷰 컨트롤러 사용을 위해서는 기존에 존재하는 클래스들을 이용해 커스텀 구현하거나(Custon Container View Controller), 만들어져 있는 몇 종류의 컨테이너 뷰 컨트롤러를(System Container View Controller) 사용해야 한다.
Custom Container View Controller 커스텀 컨테이너 뷰 컨트롤러
- 커스텀 UIViewController를 서브클래싱해, 기존 클래스들로 컨테이너 뷰 컨트롤러 역할을 할 수 있다.
- 커스텀 컨테이너 뷰 컨트롤러의 인터페이스를 구성하는 것은 커스텀하는 사람의 몫이다.
- ex : 자식 뷰 컨트롤러의 화면을 그대로 보여주거나, 원하는 레이아웃을 설정해 보여주거나, 미리 구현된 Container View를 사용할 수도 있다.
- [공식문서]커스텀 컨테이너 뷰 컨트롤러 만들기
System Container View Controller 시스템 컨테이너 뷰 컨트롤러
미리 만들어진 특정 방식의 컨테이너 뷰 컨트롤러
각자의 방식대로 하위 뷰 컨트롤러들을 관리함
각 컨테이너 뷰 컨트롤러들의 특정을 이해하고 용도에 맞게 사용
UINavicationViewController
UITabBarViewController
UISplitViewController
Container View 컨테이너 뷰
: 인터페이스 빌더에서만 추가할 수 있는, 일종의 프록시 뷰.
A container view is a proxy view that stands in for the content of a child view controller.
컨테이너 뷰는 자식 뷰 컨트롤러의 내용을 나타내는 프록시 뷰이다.
'📱🍎 iOS' 카테고리의 다른 글
UIScrollView 코드로 만들기 (0) | 2022.04.22 |
---|---|
[iOS] html 링크를 통해 Xcode 프로젝트 앱 배포하기 - Archive, .ipa 파일, manifest.plist파일 (0) | 2022.04.14 |
[Swift] 코드로 AutoLayout 설정하기 (Constraint) (0) | 2022.04.08 |
[iOS] main thread, global thread 메인 스레드(인터페이스 스레드), 글로벌 스레드(백그라운드 스레드) (0) | 2022.03.25 |
[iOS] NSOperation 과 GCD(Grand Central Dispatch), DispatchQueue (0) | 2022.03.25 |