[번역] View Controller Programming Guide for iOS - Overview - The View Controller Hierarchy

원문

미리 요약

  • 모든 윈도우는 단 하나의 루트 뷰 컨트롤러를 갖는다.
    • 윈도우 자체로는 컨텐트를 가지고 있지 않으며, 뷰 컨트롤러의 뷰가 컨텐트를 제공한다.
  • 컨테이너 뷰 컨트롤러의 자식 뷰 컨트롤러에서 다른 뷰 컨트롤러를 프레젠트할 때, 컨테이너 뷰 컨트롤러가 presentingViewController가 된다.

뷰 컨트롤러 간 관계는 각각의 뷰 컨트롤러가 요구하는 동작을 정의한다. UIKit은 규정된 방법으로 뷰 컨트롤러를 사용하는 것을 기대한다. 적절한 뷰 컨트롤러 관계를 유지하여 필요할 때 자동 동작이 올바른 뷰 컨트롤러에 전달되는 것을 보장할 수 있다. 규정된 컨텐츠 포함 및 프레젠테이션 관계를 지키지 않는다면 앱의 일부분은 기대한 대로 동작하지 않게 될 것이다.

The Root View Controller

루트 뷰 컨트롤러는 뷰 컨트롤러 계층의 앵커다. 모든 윈도우는 정확히 하나의 루트 뷰 컨트롤러를 가지고 있으며 그 컨텐트는 윈도우를 채운다. 루트 뷰 컨트롤러는 유저에게 보이는 초기 컨텐트를 정의한다. 윈도우는 그 자체로는 보이는 컨텐트를 가지고 있지 않기 때문에 뷰 컨트롤러의 뷰가 모든 컨텐트를 제공한다.

루트 뷰 컨트롤러는 UIWindow 객체의 rootViewController 프로퍼티로 접근 가능하다. 뷰 컨트롤러를 구성하기 위해 스토리보드를 사용한다면 UIKit은 실행 시간에 자동으로 해당 프로퍼티에 값을 설정한다. 코드로 윈도우를 만든다면 반드시 직접 루트 뷰 컨트롤러를 설정해야 한다.

Container View Controllers

컨테이너 뷰 컨트롤러는 더욱 관리 가능하고 재사용 가능한 조각들로부터 세련된 인터페이스를 조립할 수 있게 해준다. 컨테이너 뷰 컨트롤러는 최종 인터페이스를 만들기 위해 선택적인 커스텀 뷰에 더하여 하나 이상의 자식 뷰 컨트롤러의 컨텐트를 혼합한다. 예를 들어 UINavigationController 객체는 내비게이션 컨트롤러가 관리하는 내비게이션 바와 선택적인 툴바와 함께 자식 뷰 컨트롤러의 컨텐트를 표시한다. UIKit은 UINavigationController, UISplitViewController, UIPageViewController를 포함하여 여러 개의 컨테이너 뷰 컨트롤러를 포함한다.

컨테이너 뷰 컨트롤러의 뷰는 주어진 공간을 항상 가득 채운다. 컨테이너 뷰 컨트롤러는 종종 윈도우의 루트 뷰 컨트롤러로 설정될 수 있으나 또한 모달로 프레젠트되거나 다른 컨테이너의 자식으로 설정될 수 있다. 컨테이너는 자식 뷰들을 적절하게 배치해야 할 책임이 있다. 컨테이너의 자식 뷰들은 컨테이너 인터페이스에 의존하지만, 자식 뷰 컨트롤러들은 컨테이너와 형제 뷰 컨트롤러 대한 최소한의 지식을 가지고 있다.

컨테이너 뷰 컨트롤러는 자식들을 관리하기 때문에 UIKit은 커스텀 컨테이너에 그러한 자식들을 설정하는 규칙을 정의한다. Implementing a Container View Controller에서 커스텀 컨테이너 뷰 컨트롤러를 만드는 방법에 대한 세부 사항을 확인하라.

Presented View Controllers

프레젠트하는 뷰 컨트롤러는 현재 뷰 컨트롤러의 컨텐츠를 다른 뷰 컨트롤러의 컨텐츠로 교체하는데, 보통 이전 뷰 컨트롤러의 컨텐츠를 숨겨서 한다. 프레젠테이션은 새로운 컨텐트를 모달로 표시하기 위해 가장 흔하게 사용된다. 예를 들어 유저로부터 입력을 모으기 위해 뷰 컨트롤러를 프레젠트할 수 있을 것이다. 또한 앱 인터페이스를 위한 일반적인 빌딩 블록으로도 사용할 수 있다.

뷰 컨트롤러를 프레젠트할 때 UIKit은 프레젠트하는 뷰 컨트롤러*와 *프레젠트되는 뷰 컨트롤러 간 관계를 만든다. (반대 관계도 있다.) 이 관계들은 뷰 컨트롤러 계층의 일부분을 형성하고 런타임에서 다른 뷰 컨트롤러의 위치를 알아내는 방법이 된다.

컨테이너 뷰 컨트롤러가 포함될 때 UIKit은 작성해야 하는 코드를 간단하게 하여 프레젠테이션 체인을 수정할 수 있다. 다른 프레젠테이션 스타일은 화면에 나타나는 방법에 대한 다른 규칙을 가지고 있다. 예를 들어 풀스크린 프레젠테이션은 항상 화면 전체를 커버한다. 뷰 컨트롤러를 프레젠트할 때 UIKit은 프레젠테이션에 대하여 최적화된 컨텍스트를 제공하는 뷰 컨트롤러를 찾는다. 많은 경우에 UIKit은 가장 가까운 컨테이너 뷰 컨트롤러를 선택하지만 윈도우의 루트 뷰 컨트롤러를 선택할 수도 있다. 몇몇 경우에 UIKit에게 어떤 뷰 컨트롤러가 프레젠테이션 컨텍스트를 정의하며 프레젠테이션을 처리해야 하는지 알릴 수 있다.

풀스크린 프레젠테이션을 수행할 때 새로운 뷰 컨트롤러는 화면 전체를 커버해야 할 필요가 있다. 자식이 컨테이너의 바운즈를 알 필요가 있는 대신, 컨테이너가 프레젠테이션을 처리해야 하는지를 결정한다. 내비게이션 컨트롤러는 화면 전체를 커버하기 때문에 프레젠트하는 뷰 컨트롤러로 동작하며 프레젠테이션을 개시한다.

The Presentation and Transition Process에서 프레젠테이션에 관한 정보를 확인하라.