[Swift] NavigationController와 TabBarContoller 무엇으로 감쌀지?
화면을 설계 할 때 가끔 헷갈리는 부분이 있다.
NavigationController가 TabBarController를 감쌀지...
TabBarController가 NavgationController를 감쌀지...
그거시 문제로다..
단순해보이지만 처음에 설계를 잘못하면 뿌리를 걷어내고 코드를 정말 어렵게 다시 짜야하는
초유의 사태가 발생할 수도 있어 기록해놓는다...
단순하게 생각해보면
- TabBarController가 NavgationController를 감쌀 경우
하단의 TabBar를 유지한 상태로 Navigation 이동 (Push, Pop)을 하고 싶으면
TabBarController 의 탭(NavigationController) 하나가 Navigation 스택 하나를 가지고 있으면 된다.
그러면 각 탭별로 각 Navigation 스택이 쌓이게 된다.
어느 탭에서 Navigation 이동(Push, Pop) 했다가 다른 탭을 보고나서 다시 되돌아 와도
해당 탭의 Navigation 스택은 유지된다.
하나의 탭에서 여러개의 Navigation root를 가지게 되는 셈이 되는것이다..
반대로
- NavigationController가 TabBarController를 감쌀 경우
TabBar 자체가 Root가 되어 뿌리를 뻗고 싶은 경우
즉, TabBar에서 Navigation 이동(Push, Pop)을 할 경우
TabBar를 나타내는 TabBarController 자체도 Navigation의 하나의 스택으로 만들고 싶다면
NavigationController가 TabBarController를 감싸면 된다.
예를 들면, TabBarController 내 각 탭의 ViewController에서 Push를 할 경우
각 탭의 ViewController의 self.navigationController는 TabBarController를 감싸고 있는 NavigationController를 추적하게 된다.
TabBarController를 감싸는 NavigationController의 스택에서 Push가 되어 탭바가 가려지며 다음 화면으로 이동하게 된다.
- 주의사항
UITabBarController와 UINavigationController는 둘다 self.title처럼 컨트롤러가 가진 기본 변수가 있기 때문에
위의 두 종류의 컨트롤러가 겹치는 변수일 경우엔
self.navigationController.title이나 self.tabBarController.title 처럼 title의 컨트롤러를 명시해주는 것이 좋다..