본문 바로가기

about DEV/just follow

iOS 개발 무작정 따라하기 - Address Book 3

오늘은 NavigationController를 이용해서, 현재의 보고있는 View에서 다음 View로 넘어가는 코딩을 진행하도록 한다. 프로젝트를 생성하고, 생성한 프로젝트내에서 UINavigationController를 붙히는 작업까지는 지난번 강좌에서 진행했다.
아직 진행하지 않았다면, 아래 URL을 클릭하여 진행하도록 하자.

iOS 개발 무작정 따라하기 - Address Book 1 다시보기
iOS 개발 무작정 따라하기 - Address Book 2 다시보기


◼ 이동할 ViewController를 생성해보자. (AddGroupViewController)

지금까지의 파일 구조는 AppDelegate - ViewController로 끝나있다.
AppDelegate 는 앱의 위임자라는 말인데, iOS나 Mac개발에서 통용되는 개념이다. 
뭐 깊이있게 다루자면, A4용지 몇장으로도 부족할태니 그냥 그런게 있구나..하는 정도만 이해하고 넘어가면 될 것이다.  더 궁금하면 시중에 나와있는 책들을 구입해서 참고하자.

어쨌든, 실제로 UI를 담당하는 Class는 ViewController Class인데, 이곳에서 다음 View로 이동하는 부분을 구현해보도록 하겠다.  사용자가 어플을 실행하면 첫 화면은 ViewController가 될 것이고, Group을 추가하기 위해서 네비게이션 바 상단 Add버튼을 터치하여 새로운 그룹을 생성하는 Controller를 만들 것이다.


Project를 열어둔 상태에서, 상단 이미지를 참조하여 New File을 실행한다.
단축키로는 Command + N이다.


그럼 상단의 이미지와 같이 어떤 종류(?)의 파일을 생성할거니? 라고 묻는 창이 나온다.
붉은색 테두리부분을 참조해서,  iOS 섹션의 Cocoa Touch내에 Objective-C Class를 선택한 후 Next버튼을 클릭한다.


그럼 파일명을 선택하는 창으로 이동된다.
"새로운 그룹"을 만드는 뷰이기 때문에 AddGroupViewController라는 명칭을 작성하자.
Subclass of 라는 곳은 UIViewController를 선택하자.

하단의 Check Box가 2개가 있는데, Targeted for iPad는 "아이패드용 Class니?" 라는 질의고, With XIB for user interface라는 것은 "클래스생성과 동시에 XIB파일을 해당 클래스로 만들거니?" 라는 질의다.

iPad용 클래스가 아니기에 상단 Check Box는 Unselected한 후 하단 XIB만 동시생성 하도록 하자.


그 다음으로는 저장할 위치를 묻는다. AddressBook 폴더내에 Create한다. 


자! 이제 여러분이 만든 New Class (AddGroupViewController)가 생성되었다.
왼쪽 붉은 테두리내에 파일이 3개가 새로 생성된 것을 확인할 수 있을 것이다. 

.h / .m / .xib 파일 이렇게 3종류의 AddGroupViewController 파일들이 생성되었다.


◼ AddGroupViewController로 이동해볼까?

이제 다시 기존에 존재했던 ViewController.m 파일로 돌아가보자. 
헷갈리지말자. 꼭 ViewController.m 파일을 편집해야한다.  잘 모르겠다면 상단의 이미지를 참고하자.  붉은 테두리중에 검정바탕에 있는 부분을 보면, #import "AddGroupViewController.h"이 추가되어있다.

저기서 #import라는게 뭘까? 라고 고민이 된다면 지극히 정상적이다.
import를 하게 되면 ViewController.m 파일에서 AddGroupViewController를 불러드린다.


이제 다시 상단 이미지를 확인해보면, 기존의 (void)addGroup이라는 method에 3줄의 코드가 추가되었다.  여기서 잠깐 #import를 안하면 어떻게 될까? 궁금해요? 궁금하면 오백원... 


해보자.. 
상단에 작성했던 #import "AddGroupViewController.h" 이라는 한줄을 삭제하면, 하단에 조금 전에 작성했던 3줄의 코드 색상이 이상하다?  그리고 좌측에 적색 Error 표기가 되어있다.

자 이제 500원은 입금하길 바란다.  내가 대신 궁금증을 해결해줬으니깐!


이제 Run 시켜보자.  그럼 다시 시뮬레이터가 실행되는데, 이번엔 상단의 Add Button을 클릭해보자.

얍!!  보자!  뭐가보이는가?


왔노라! 보았노라! 밀었노라... 읭?

상단의 Back Button을 눌러보자. 다시 에니메이션이 일어나면서 원래의 상태로 되돌아오는 것을 확인할 수 있다.  대체 왜 이런 결과가 나오는 걸까? 우리는 단지 코드3줄만 추가했을 뿐인데 말이다.

추가한 3줄을 다시금 돌아보자.

AddGroupViewController *addGroupVC = [[AddGroupViewController alloc] initWithNibName:@"AddGroupViewController" bundle:nil]; 이라는 첫째줄을 확인해보자.
AddGroupViewController를 (우리가 조금전에 새로 생성한 바로 그 클래스다) 만들어서 초기화한 후에, addGroupVC라는 인스턴스변수에 대입했다. 

그 뒤에, [self.navigationController pushViewController:addGroupVC animation:YES]; 라는 두번째 줄을 작성했다.  바로 여기서 실제적인 동작이 일어난다.

우리가 지금 작성하고 있는 ViewController.m라는 클래스는 그 위에 UINavigationController가 존재하고 있다.  2장의 내용을 돌아보면 확인할 수 있을 것이다.  그러므로 navigationController의 기본 기능들을 이용할 수 있다는 것이다.

UINavigationController는 Stack구조로 ViewController들을 쌓는 개념이며, 우리가 추가한 2번째줄의 코드인 pushViewController는 해당 네비게이션컨트롤러에 Stack구조를 하나 쌓는 다는 뜻으로 해석하면 된다.

마지막 [addGroupVC release]; 는 생성한 인스턴스변수를 메모리에서 해제한다는 것을 의미한다.  

내가 지금 이렇게 해당 코드에 대해 설명을 하고 있는데, 단순히 코드만 작성하고 보여주는 것보다는 조금이나마 이해를 돕기 위한 주석이라고 생각하고, 100% 다 이해할 필요는 없이 한번쯤 읽고 넘어갔으면 한다.  언젠가 되돌아보면, 점점더 직관적으로 이해할 수 있을거라 생각한다.  다음 강좌는 본격적으로 AddGroupViewController의 기능들을 구현하고 UI Objects를 올려보도록 하겠다.