ViewController는 계층을 이루면서 구성된다. 그 중 대표적으로 알려진 것이 NavigationController, TabBarController 이다. 오늘은 계층이 어떻게 구성되었는지 간단하게 알아보고, 구체적으로는 NaviagtionController와 TabBarController를 알아보려 한다. 그럼 시작해보자.
viewControllers
NavigationBar
navigationItem.title
, navigationItem.prompt
navigationItem.titleView
설정navigationItem.rightBarButtonItem
toolBar
NavigatinController의 Life Cycle
회전
Transition
특정 VC에서 회전 예외 룰 적용
서브 클래싱 후, supportedInterfaceOrientations
오버라이딩하는 방법도 가능
NavigationController avigationControllerSupportedInterfaceOrientations
예시
Nav -> A -> B -> C
A는 potrait, B, C는 landscape도 지원하고 싶음
Navigation Controller에서 topViewController 접근 후, 해당 ViewController가 회전 고정을 어떻게 했는지 확인하여 Navigation Controller역시 돌리는 방법을 사용
ViewController 회전 방향에 따라 Navigation Controller의 방향도 돌려줘야 한다는 것이 포인트
// 돌리고 싶지 않은 VIewController
override var supportedInterfaceOrientations: UIInterfaceOritentationMask {
return .potrait
}
override var shouldAutorotate: Bool {
return true
}
// NavigationControllerDelegate 채택 객체
func navigationControllerSupportedInterfaceOrientations(_ navigationController: UINavigationController) -> UIInterfaceOrientationMask {
return (navigationController.topViewController?.supportedInterfaceOrientations ?? .all
}
A -> B Push의 경우 위와 같은 순서로 동작한다.
pop의 경우 위와 같은 순서로 동작한다.
위 그림에서 가운데 있는 것이 TabbarController이다. TabBarController의 경우 다음과 같은 특징을 갖는다.