이전 포스팅에서는 UIViewController를 추가하고 그 위에 Coding으로 NavigationController를 생성해서 붙였었다.
이번에는 UIViewController 추가없이 Interface Builder를 사용해 Window 위에 곧바로 NavigationController를 생성해보자.

Empty Application Template으로 Project를 생성하면 기본적으로 AppDelegate.m 파일의 아래와 같은 코드에 의해 Window가 하나 생성되어져 있지만 XIB 파일은 만들어지지 않는다.

 
이번에는 Interface Builder를 사용할 것이기 때문에 작업할 XIB 파일이 필요하다.
Project는 이전과 마찬가지로 Empty Application Template을 선택하여 생성한 후 아래와 같이 XIB 파일을 추가한다.
먼저 User Interface를 선택하고... Application을 선택한다.

Device Family는 물론 iPhone으로 선택...

MainWindow.xib라는 이름으로 만들어보자.

왼쪽 project 네비게이터에서 project를 선택하고 오른쪽 중간에 Main Interface 항목을 확인해 보면 방금 만든 MainWindow가 생겼을 것이다. 이를 선택한다.

왼 쪽 project 네비게이터에서 MainWindow.xib를 선택하고 옆의 Objects에서 App Delegate를 선택하면 나타나는 오른쪽 Inspector창에서 세번째 Identity Inspector를 선택 후 Class를 "ProjectName"AppDelegate를 찾아 선택한다.

다음은 아래처럼 Inspector 메뉴의 아래쪽에 있는 Objects 리스트에서 Navigation Controller를 클릭후 에디트화면으로 끌어다 놓는다.
이때 기존에 화면상에 있던 윈도우 안쪽으로는 놓을 수 없으니 빈 공간에 아무곳에나 놓는다.

다음은 project 네비게이터에서 NavigationTestAppDelegate.h 파일을 열어 아래 내용을


아래와 같이 IBOutlet 키워드를 추가하여 수정해준다.


NavigationTestAppDelegate.m 파일에는 위에서 property 선언해준 navigationController 인스턴스를 synthesize해준다.


다시 project 네비게이터에서 MainWindow.xib를 선택하고 옆의 Objects에서 App Delegate를 선택하면 나타나는 오른쪽 Inspector창에서 6번째 Connections Inspector를 선택하면 Outlets 항목에 위에서 property 선언해준 window와 navigationController가 나타난다.

navigationController 옆의 원을 클릭하고 왼쪽의 Objects - Navigation Controller 항목으로 드래그해 연결하고


window는 옆의 원을 클릭 후 왼쪽의 Objects - Window 항목으로 드래그하여 연결한다.



다음은 project 네비게이터에서 NavigationTestAppDelegate.m 파일을 다시 열어 navigationController를 window에 붙여주어 실행되면 화면에 표시되도록 하는 코드를 추가한다.



여기까지 하고 실행을 해보자.

예상과 달리 화면에는 NavigationBar가 나타나지 않는다.

놀라지 말고 시뮬레이터의 홈버튼을 눌러 프로그램을 종료했다가 홈화면에서 프로그램 아이콘을 클릭해 다시 실행해보자

어떤가??? 정상적으로 NavigationBar가 나타날 것이다.

여기에서 한 가지 확인하고 넘어갈 것이 있다.

처음에 Empty Application Template으로 project를 생성했을 때 AppDelegate.h 파일에 아래와 같이  window를 생성해주는 코드가 포함되어 있는것을 기억할 것이다.



또, 우리가 XIB 파일을 생성했을 때 ( MainWindow.xib를 확인해 볼것 ) App Delegate와 함께 기본적으로 Window가 하나 생성되어 있는 것을 알 수 있다.

따라서 현재 생성되어 있는 window는 2개가 된다.

최초 어플리케이션이 실행되면 AppDelegate.h 파일에서 생성된 window가 초기화되어 화면에 표시되기 때문에 나타나는 현상이며, 대부분의 일반적인 네이티브앱 개발 시 window는 하나만 필요하다.

우리는 MainWindow.xib를 생성할 때 만들어진 window를 사용할 것이기 때문에 AppDelegate.h에서 만들어진 window는 조금도 필요하지 않다.

즉, AppDelegate.h 파일속의 window 생성 및 초기화 코드는 불필요한 코드로 걍 삭제해버리거나 주석처리를 해버리면 된다. 아래와 같이 주석처리를 하자.



다시 실행을 해보자.

어떤가??? 이번엔 최초 실행될 때부터 정상적으로  NavigationBar가 표시되는 것을 확인할 수 있을 것이다.


이후에 ViewController를 추가하여 화면전환을 하는 내용은 이전의 포스트를 참고하면 쉽게 구현이 될 것이다.



Posted by 지라스
,