아이폰 어플리케이션의 상당 수가 UITabBarController 와 UINavigationViewController를 이용합니다.
UITabBarController는 메인 메뉴를 선택하는 역할을 주로 담당하고
UINavigationViewController는 해당 기능 안에서의 하위 기능으로의 뷰간 전환 시에 주로 이용됩니다.
필자 또한 리딩워치를 개발하면서 TabBar와 NavigationBar를 이용하여 구현하였습니다.
필자가 아이폰 프로그래밍 초보시절 (지금도 초보이긴 마찬가지이긴 합니다만) 바로 이 TabBar와 NavigationBar의 조합 방법을 몰라서 약간 해맨 기억이 있습니다. 애플의 가이드와 구글링을 통해 방법을 찾았었는데, 여러가지 방법이 있겠지만, Interface Bulder를 최대한 이용하는 방법으로 소개해 볼까 합니다.
우선 필자가 이 글에서 샘플로 사용할 뷰의 구조는 다음과 같습니다.
Tab1
NavView1_1
touch button
NavView1_2
Tab2
NavView2_1
touch button
NavView2_2
Tab3
NavView3_1
touch button
NavView3_2
Tab4
NavView4_1
touch button
NavView4_2
구조는 간단합니다. 탭바가 하나 있고 탭바의 아이템으로 4개의 탭이 있습니다.
Tab1을 선택하면 NavView1_1이 실행되도록 합니다. NavView1_1에는 버튼을 하나 두고 그 버튼을 클릭하면 NavView1_2로 Navigation되도록 합니다.
Tab2을 선택하면 NavView2_1이 실행되도록 합니다. NavView2_1에는 버튼을 하나 두고 그 버튼을 클릭하면 NavView2_2로 Navigation되도록 합니다.
Tab3을 선택하면 NavView3_1이 실행되도록 합니다. NavView3_1에는 버튼을 하나 두고 그 버튼을 클릭하면 NavView3_2로 Navigation되도록 합니다.
Tab4을 선택하면 NavView4_1이 실행되도록 합니다. NavView4_1에는 버튼을 하나 두고 그 버튼을 클릭하면 NavView4_2로 Navigation되도록 합니다.
애플의 가이드에 의하면 네비게이션뷰컨트롤러 보다 탭바컨트롤러를 상위에 두도록 권고하고 있습니다.
나중에 알게 되었지만 뷰컨트롤러의 구조상 그렇게 밖에 될 수 없습니다.
구현의 순서는 다음과 같이 진행해 보겠습니다.
1. 프로젝트 생성
2. 필요한 뷰클래스 생성 및 구현 (4개 뷰 모두)
3. Interface Bulder를 이용하여 탭바에 연결
4. 빌드 앤 런
그럼 프로젝트 생성을 먼저 시작하겠습니다.
1. Xcode를 실행하여 Fie에서 New Project를 선택합니다.
2. iPhone OS Application의 Tab Bar Application을 선택합니다.
3. 적당한 폴더를 선택하고 프로젝트 이름을 TabNav로 입력하고 프로젝트를 생성합니다.
다음은 각 탭에 연결될 네비게이션뷰 클래스 8개를 우선 만들어 보겠습니다.
1. Groups & Files의 Classes 에서 마우스 오른쪽 버튼 클릭하여 New File을 선택합니다.
2. UIViewController subclass 를 선택하고 With XIB for user interface 체크를 확인하고 Next버튼을 클릭합니다.
3. 파일이름을 NavView1_1.m을 입력하고 헤더파일 포함 체크를 확인 후 OK 버튼 클릭합니다.
4, 위 1~3과정을 반복하여 NavView1_2, NavView2_1, NavView2_2, NavView3_1, NavView3_2, NavView4_1, NavView4_2를 각각 생성합니다.
5. 위에서 생성된 Class 안의 xib 파일 8개를 모두 Resources로 드래그드롭합니다.
여기까지 필요한 뷰클래스는 모두 생성하였습니다.
NavView1_1, NavView2_1, NavView3_1, NavView4_1에서 버튼을 터치하면 실행될 Instance Method pushView를 다음과 같이 각 소스 파일에 선언과 정의합니다.
최근 덧글