오늘의 주제

1. Delegate 실습 


열 아홉번째 시간입니다.^^

지난 번에는 delegate의 개념에 대해 잠깐 살펴보았지요?
이번에는 말보다는 실습을 한 번 해보겠습니다 ㅎㅎ

어제는 제 어머니 생신이었습니다!!! 뭐.. 그렇다구요 ㅎㅎㅎ

자 그럼 스따뚜~~~~~~~~~~~~


# MKMapViewDelegate

자, 지지난번 까지 사용했던 프로젝트 고대로 계속 사용합니다~

지난번 포스팅처럼 어떠한 객체(여기서는 맵뷰)가 또다른 객체(여기서는 SecondViewController)를 자신의 delegate로 먼저 선언을 해 줘야 합니다.
SecondViewController에서 생성해준 myMapViewController안에 있는 myMapView객체가 SecondViewController를 자신의 대리자로 선언해줍니다.
여기서 self라는 키워드는, SecondViewController.m에서 써졌기 때문에 SecondViewController의 객체를 뜻합니다.


어? 그런데 저렇게 또 경고문구가 뜹니다.!!
내용인 즉슨 SecondViewController가 MKMapView의 delegate가 되기에 적절하지 않다는 뜻인 것 같은데요~
왜 그럴까요??

그 객체가 어떤 객체의 델리게이트가 되겠다고 선언이 될때, 자기 자신도 준비가 된 상태여야 합니다!
그래서 나는 그 객체의 대리자가 될 준비가 되어있다! 라고 헤더에 명시해 주어야 합니다. 아래와 같은 방법으로 준비가 되었음을 알려줍니다.


자, 그럼 MKMapView의 Delegate는 무엇을 할 수 있을까요?
궁금하다면 개발문서로 가봐야겠지요?ㅎㅎ
또는 웹버젼의 개발문서를 참조합니다.

어!? 그런데 Protocol 이라는 단어가 은근 거슬리네요?ㅋㅋㅋ delegate라는 녀석이 프로토콜의 개념안에 포함되는 녀석이므로... 다음에 시간내서 프로토콜에 대해서도 간략히 소개해 보도록 하겠습니다~


제가 이번에 구현해 보고자 하는 것은 맵뷰에서 지도가 움직이려고 할때, 그리고 움직인 후에 delegate를 통하여 특정한 동작을 실행시키려 합니다.
여기 적절한 메소드가 보이네요~ 눌러봅니다.


그러면 이렇게 함수의 원형이 친절하게 나옵니다.
주으윽 긁어서 복사합니다.


여기 이렇게 SecondViewController.m으로 돌아와서 복사해온 함수의 원형을 붙여 넣어주고 안에 그 상황에 맞는 행동을 넣어줍니다.
저는 region이 변경되려 하기전, 그리고 변경 후에 각각 로그를 출력하도록 해보았습니다.
위에 #pragma mark - 라고 써있는 갈색 녀석들은 프로그래머가 책갈피를 만들어 두는 것과 비슷하다고 생각하시면 됩니다.
습관을 들여두면 정말로 유용한 기능이므로, 다음에 시간이 난다면 팁쪽에 따로 포스팅 해보도록 할게요~
아니면 바로 검색 고고씽~!


실행해서 지도를 이리저리 움직여 봅시다~!


요로코롬 로그가 찍히네요~^0^


이제 좀 감이 잡히시려나 모르겠네요~

이해되지 않는 부분은 댓글 주세요~

제가 매일매일 지켜보고 있으니까요 ㅎㅎ

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 


Posted by yagom

댓글을 달아 주세요

  1. Favicon of https://winplz.tistory.com BlogIcon 윈플. 2012.03.30 13:10 신고  댓글주소  수정/삭제  댓글쓰기

    역시 델리게이트는 엄청 편합니다.
    대신에 그 만큼 각 델리게이트에 무슨 기능이 포함되어있는지 아는것이 중요하겠네요..

  2. Ryan 2012.04.08 13:28  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? iPhone 개발 초짠데요, delegate와 protocol의 개념이 잘 안와닿네요...친절하게 설명을 해주셨는데도...delegate와 protocol의 차이와, 언제 사용되는지 등 설명이 되어 있는 documentation이 있을까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.08 17:06 신고  댓글주소  수정/삭제

      원하시는 답변이 될 지는 모르겠지만,

      http://cafe.naver.com/mcbugi/7177
      http://blog.xiles.net/221

      이 글들을 한 번 참고해 보시구요, 정확히 어떤 부분이 잘 다가오지 않으시는지 알려주시면 제가 한 번 다른 방법으로 설명해 보도록 할게요...^^

      제가 설명 해놓고도 참 이게 처음 하는 분들에겐 쉽게 들어오기 어려운 부분이라 난감하네요..ㅎ

      일단 이것 저것 델리게이트 가지고 놀아보시면 느낌이 올지도 모르겠습니다 ㅎ

  3. 초보자 2012.06.19 07:58  댓글주소  수정/삭제  댓글쓰기

    data source에 대한 부분은 없는데 혹시 빠트리신 건가요? 강의 너무 잘보고있습니다~ 수고하세요~^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.19 09:23 신고  댓글주소  수정/삭제

      안녕하세요 초보자님 :-)
      델리게이트와 데이터소스는 약간의 개념차이는 있지만, 이들을 구현하고 사용하는 방법에 큰 차이가 없기 때문에 뭉쳐서 포스팅 했어요~^^
      다른 포스팅 보면 실제로 데이터 소스를 어떻게 활용하는지 보실 수 있을 거예요^^*

  4. 쌩초짜 2012.06.27 17:13  댓글주소  수정/삭제  댓글쓰기

    감사합니다 ㅠㅜ

    아이폰 개발 완전 쌩초짜인데,
    덕분에 잘 공부하고있습니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.27 17:23 신고  댓글주소  수정/삭제

      :-) 안녕하세요 쌩초짜님~
      방문 고맙습니다 ㅎ
      도움이 된다고 말씀해 주시니 저도 영광입니다 ^^*
      자주자주 놀러오세요 ㅎ

  5. Kastner 2012.07.01 15:32  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 오늘 처음 방문했는데, 정리가 잘 되어있어서 도움이 많이 되네요 ^^*

    한가지 궁금한 점이 있는데, 사용하시는 메소드들의 종류나 사용용도는 어떻게 깨우치신 건지 ;ㅁ; 궁금합니다..

    뭔가 되게 방대해 보여서 어떻게 접근해야할지 막막하네요..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.01 22:01 신고  댓글주소  수정/삭제

      안녕하세요 Kastner님 :-)
      방문해 주셔서 고맙습니다 ㅎ
      http://blog.yagom.net/55
      이 글을 참고하시면 도움이 되실 것 같습니다 ^^*
      또 궁금하신 점 있으면 말씀해 주세요 ㅎ
      힘찬 한 주 시작 되시길 :-)

  6. Kastner 2012.07.01 23:27  댓글주소  수정/삭제  댓글쓰기

    친절한 답변 감사합니다. 도큐먼트에 관해선 무심결에 그냥 지나치고 말았네요 ;;
    (__) 감사합니다.

  7. 초보kay 2012.07.27 10:32  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    야곰님의 강의를 너무 잘 보고있습니다. 감사합니다.

    질문 좀 드릴게요. ㅠㅠ

    델리게이트로는 아무 클라스나 될수 있는지요.
    저는 맵뷰를 포함하는 뷰콘트롤러인 myMapViewController클라스를 직접 맵뷰의 델리게이트로 설정해봤는데요.(클라스헤더파일에 <MKMapViewDelegate>선언)
    이유는 실험을 해보는데도 있고 또 이 콘트롤러의 헤더파일에는 이미 <MapKit/MKMapView.h>가 임포트 되여 있어서요.
    그런데 맵을 움직여도 맵이동사건을 처리하는 함수들이 호출되지 않아요. 물론 로그도 안남고요.ㅠㅜ
    맵뷰의 델리게이트 설정은 맵콘트롤러클라스의 initWithNibName()함수안에 해주었고요([myMapView setDelegate:self];),
    맵뷰가 움직일때 호출되여야 할 함수들도 이 콘트롤러클라스의 구현파일에 적었거든요.
    에러는 안뜨는데 호출이 안되는건 왜 그런지요... ㅠㅠㅠ
    야곰님 말씀대로 SecondViewController를 델리게이트로 할땐 제대로 되는데 델리게이트클라스를 바꾸면 왜 안될가요???

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 13:13 신고  댓글주소  수정/삭제

      어떤 녀석의 델리게이트는 어떤 객체(오브젝트, 인스턴스)간에 될 수 있습니다.

      대상 객체를 델리게이트로 설정한 후 그 대상 객체의 클래스 안에 델리게이트 메소드를 작성해 주시면 됩니다.

      만약 해당 델리게이트 메소드가 호출되지 않는다면 델리게이트가 제대로 설정되었는지 체크를 해 보아야 할 것입니다.

      init 메소드 말고 viewDidLoad 메소드에서 설정해 보시기 바랍니다.

    • 초보kay 2012.07.28 10:53  댓글주소  수정/삭제

      아 하! 됩니다. init메소드에서 설정한것이 잘못이였습니다.
      viewDidLoad메소드에서 설정하니 로그가 찍힙니다.

      친절한 답변 정말 감사드립니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.28 13:13 신고  댓글주소  수정/삭제

      해결되셨다니 다행입니다 ^^*

  8. neoaero 2012.07.28 22:39  댓글주소  수정/삭제  댓글쓰기

    여러가지를 델리게이트로 지정하는게 가능한가요??
    가령 <MKMapViewDelegate,TableViewDelegate>로 작성해도 되는지요??
    아니면 한가지 객체만 가능한거지요??

  9. hyung 2012.11.13 09:52  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요 ^^오늘도 염치 불구하고 질문하나 올려도 될까요
    다름이 아니고 IOS기본 앨범에 버튼들을 더 추가 시키고 싶은데 어떻게 안될까요
    UIImagePickerControllerSourceTypeSavedPhotosAlbum;으로 하면 다 만들어 져버리잖아요ㅠㅠ
    방법이 있을까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.13 10:27 신고  댓글주소  수정/삭제

      언제나 환영입니다 :)
      UIImagePickerController는 기본적으로 네비게이션 컨트롤러로 움직이게 되죠~
      네비게이션 컨트롤러에 버튼을 커스터마이징 해 주면 될 것 같기도 한데요 :)
      http://stackoverflow.com/questions/7483906/customize-back-button-for-uiimagepickercontroller
      이 글이 힌트가 되려나 모르겠습니다 ㅎ
      버튼을 어디에 더 추가하려고 하는지에 따라 방법이 조금 변할 것 같습니다 ㅎ
      답변이 부족하다면 또 말씀해 주세요^^*

    • hyung 2012.11.13 14:45  댓글주소  수정/삭제

      옷.. 아직 잘모르겠지만 연구해볼게요! 뭔가 찾던 그것인거 같아요
      감사드립니다^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.13 15:14 신고  댓글주소  수정/삭제

      화면 왼쪽 위의 Run 버튼 오른쪽에 보시면 시뮬레이터 버전을 변경을 하여 테스트 해 보실 수 있습니다. :)

  10. 딴또 2013.03.11 15:20  댓글주소  수정/삭제  댓글쓰기

    정말 열심히 보면서 따라하고 있습니다.

    야곰님의 방대한 지식에 경의를 표합니다.

    어떻게 그 많은 지식을 쌓으셨는지...

    저는 따라하면서도 막막하기만 한데...ㅜ.ㅜ

  11. dklee7206 2013.04.17 14:01  댓글주소  수정/삭제  댓글쓰기

    설명 감사합니다.
    [[myMapViewControllerForModal myMapView] setDelegate:self]; 이부분이 문법적으로 이해가 안되서 그런데
    부연설명 부탁드려도 될까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.17 22:27 신고  댓글주소  수정/삭제

      현재의 인스턴스(self)가 myMapViewControllerForModal 인스턴스의 property로 되어있는 myMapView 인스턴스의 델리게이트가 되겠다는 뜻입니다.

      즉 C++이나 자바 등을 배우셨다면
      myMapViewControllerForModal.myMapView.delegate = self;
      와 같은 말입니다.

  12. 2014.08.01 10:14  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.08.03 20:04 신고  댓글주소  수정/삭제

      안녕하세요, 델리게이트 또는 데이터소스 메소드 중에 required 라고 표시된 녀석들은 꼭 구현해 주어야 합니다. 빠진 메소드가 없는지 확인해 보세요 ^^

Xcode4 미만 버전을 쓰던 분들에게는 Xcode4는 정말 헷갈리죠..^^

Xcode4에서 프레임워크 추가하는 방법입니다.

네비게이션 영역에서 프로젝트를 클릭해주고 TARGETS를 클릭. Summary 탭으로 이동합니다.

Linked Frameworks and Libraries 영역이 있습니다.



거기서 +버튼을 누르시고 원하는 프레임워크를 추가!



참 쉽죠잉~ㅎ

라이브러리도 마찬가지 입니다^^

↓↓↓도움이 되었다면 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

iOS 어플리케이션 개발을 한 대의 맥에서 한다면 걱정이 없습니다만,

여러대의 맥에서 해야 한다면 인증서를 여러대의 맥에 설치를 해야 합니다.

간단하게 생각하면 개발자 홈페이지에서 다시 다운받아 설치하면 된다고 생각을 하지만, 실상 그렇지가 못합니다.

참..! 그리고 처음 인증서를 발급 받을 때 생성하였던 파일들을 모두 보관해 두시기 바랍니다.

나중에 갱신에 필요할지도 모르니까요^^

여튼, 여러대의 맥에서 개발을 하려면 처음 인증서를 발급받은 맥에서 일정 과정을 거쳐 복사하여 다른 맥으로 옮겨줘야 합니다.


인증서 파일을 복사하려면

응용프로그램 - 유틸리티 - 키체인 접근

을 실행합니다.



키체인에서 로그인, 카테고리에서 인증서를 선택하면 인증서 목록이 쭈욱 나오게 됩니다.

거기에서 관련된 3개의 항목이 존재합니다.

iPhone Distribution, iPhone Developer, Apple Worldwide Developer Certification Authority

이 세가지 항목을 선택하고 오른쪽버튼을 눌러 3개 항목 보내기...를 클릭합니다.



경로를 지정하고 저장을 누르면

인증서를 다른 맥에서 설치할 때 사용할 암호를 생성합니다.



그 후, 현재 매킨토시의 계정 비밀번호를 확인합니다. (3번 확인 할 수도 있습니다.)



이제 이렇게 이쁘게 인증서 내보내기가 완료되었습니다.



다른 맥에 가서 이 파일을 실행시키고 암호를 입력해주면 자동으로 인증서 설치가 완료됩니다 :-)



↓↓↓도움이 되었다면 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 밤피 2012.03.29 07:55  댓글주소  수정/삭제  댓글쓰기

    감사합니다~잘봤습니다^^즐겨찾기 하고 자주 와서 참고하겠습니다^^

    티스토리는 어케 가입하나요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.29 10:36 신고  댓글주소  수정/삭제

      찾아주셔서 감사합니다.^^*
      저도 가입한지 너무 오래되서 기억이 안나네요..ㅠ
      그때는 누군가 초대장을 보내서 가입했던거로 기억하는데요..ㅋ

  2. Favicon of https://zuperztar.tistory.com BlogIcon LarryAhn 2012.04.14 17:29 신고  댓글주소  수정/삭제  댓글쓰기

    캬~~ 블로그에 정말 유용한 정보들만 쏙쏙 있어서 정말 좋네요.

    다년간 윈도우 프로그램만 개발하다가 맥OS 를 살펴시 같이 하려다 보니 다시 초보자가 된 느낌이 많네요 ㅎㅎ

  3. yimcold 2014.02.24 14:46  댓글주소  수정/삭제  댓글쓰기

    짱짱짱짱짱!!!!!!!!!!!
    여기는 정말 유용유용한 정보만 있는듯!!

  4. kpjSkool 2014.03.22 05:29  댓글주소  수정/삭제  댓글쓰기

    감사합니다!
    막 iPad 어플을 개발하기 시작했는데요,
    objective-c부터 도움받는게 정말정말 많습니다.
    나중에 꼭 훌륭한 어플 만들어서 보답해드리고 싶네요
    감사합니다!
    자주 들를게요!


오늘의 주제

1. Delegate 
2. Data Source



열 여덟번째 시간입니다.^^

지난 번에는 맵뷰를 간단히 만들어 보았습니다~
정말 더 필요한거 없어요?
아무도 댓글도 반응도 추천도 없습니다...
저 블로그 접을까봐요...ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

이번에는 중요한 개념중에 하나인 Delegate와 Data Source에 대하여 알아보도록 하겠습니다~

중요한 개념이므로 이해 될 때 까지~!
스따뚜~~~~~~~~~~~~


# Delegate???

Delegate. 델리게이트.
우리말로 번역하면 대리자 정도로 해석할 수 있겠네요.

말 그대로 Delegate는 누군가가 해야 할일을 대신 해주는 녀석이라고 생각하시면 됩니다. 조력자가 되겠지요.

말로만 이렇게 설명하면 잘 감이 안오시죠?

간단히 그림으로 알아봅시다.

지난 번에 만들어 보았던 맵뷰입니다.ㅋ
맵뷰는 뷰 컨트롤러 위에 올라가 있는 상태였죠~


그런데 맵뷰가 동작하는 동안 뭔가 자신이 하기 벅찬 일들을 누군가 해줬으면 합니다.
그럴때 누군가에게 자신의 상태를 파악해서 적절한 일을 해주기를 원할때 델리게이트 선언을 해 줍니다.

바로 이렇게 말이죠~


그러면 델리게이트로 선언된 객체는 자신을 델리게이트로 임명한 객체가 어떤일을 도와달라고 하면 지정된 메소드를 통하여 알아서 척척척 스스로 어린이처럼 처리해 주는겁니다 ㅎㅎㅎ
사실 이렇게 말로만 설명하면 잘 감이 안와요~_~

# Data Source???

또한, 데이터 소스라는 것은 말그대로 데이터의 근원, 원천 뭐 이런뜻인데요~
어떤 객체가 누군가의 데이터 소스로 선언이 되면 선언한 객체가 데이터를 필요로 할 때 지정된 메소드를 통하여 데이터를 넘겨주는 역할을 합니다.

바로 이렇게 되는 시츄에이션 입니다.


이렇게 개념설명만으로는 잘 모르시겠다구요?ㅎ

그럼 다음번에는 간단한 실습을 통해서 알아보도록 할게요~

I'll be back!

커밍 쑨~!

by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. chan 2012.03.30 10:50  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다~~

    다음예제 빨리 볼수 있으면 좋겠네요~~ㅎㅎ

  2. 궁금 2012.03.30 16:25  댓글주소  수정/삭제  댓글쓰기

    UIviewcontrooler 클래스를 만들고 , 그 클래스의 .h 파일에 아웃렛을 정의하면(예를들어서 texte) .xib에서 First owner로 연결하면
    예전에는 texte 로 보였던거 같은데 이제는 delegate로 보여요, 이거 왜 이러는지 아시나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.31 01:17 신고  댓글주소  수정/삭제

      흐음..
      UIViewController를 상속받은 클래스에 IBOutlet으로 texte를 변수로 선언해 준 후에 xib파일에서 연결할 때를 말씀하시는 건가요?
      File's Owner로 부터 출발하여 연결대상(texte)로 연결할 때 그렇게 나온다는 것은 조금 이해하기 어렵네요^^;
      혹시 반대로 끌어 오신것은 아닌지요..?
      좀 더 자세한 설명이 필요하네요^^;

  3. 인절미후후 2012.04.05 15:15  댓글주소  수정/삭제  댓글쓰기

    강좌 항상 잘 읽고 있습니다.
    여러번 더 봐야겠어요.
    아이폰 강좌는 xcode업데이트 때마다 달라지는 인터페이스 덕분에 이전 버전의 강좌로는
    초심자들에게 벽에 막히는게 많습니다.
    최신 자료를 가지고 강좌해주는 점만으로도 큰 감사함을 느끼는 바입니다. ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.05 16:27 신고  댓글주소  수정/삭제

      아이쿠..^^
      다른 분들도 그때는 최신이셨을 텐데..ㅎㅎ
      강좌라고 하기도 부끄러운 수준입니다^^;
      더욱 분발해 보도록 하겠습니다~!
      댓글 감사드립니다~!
      필요한 것 있으시면 말씀해 주세요~

  4. Potomac 2012.04.13 04:49  댓글주소  수정/삭제  댓글쓰기

    그냥 눈팅만 하고 있었는데 필요한걸 말하라는 바람에 용기를 내어 적어요.

    버튼에 아이폰에 저장된 사진이나 그림을 불러와서 그 사진이나 그림으로 버튼을 계속 사용하고 싶은데요.
    사진을 이동시켜서 버튼에 적당한 부분이 표시되면 더 좋겠구요.
    물론 버튼의 위치와 크기는 그대로 유지하고 싶어요.

    궁금한건 많지만 다음에 또 물어보려구요.

    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.13 09:25 신고  댓글주소  수정/삭제

      ^^ 덧글 주셔서 고맙습니다.
      일단 이미지를 버튼이나 뷰로 불러오는 것에 대해서 조만간 포스팅 할게요~
      그런데 버튼 안에서 이미지를 원하는대로 움직이는 것은 조금 어려운 튜토리얼이 될 것 같네요..^^
      여기 블로그의 초급 수준을 조금 벗어나는 것이라, 일단 버튼에 사진을 불러오는 방법에 대해서는 먼저 포스팅 해 보도록 하겠습니다. 만약에 추후에 필요하시다면 요청하시면 예제 알려드리도록 할게요^^

  5. Potomac 2012.04.14 03:06  댓글주소  수정/삭제  댓글쓰기

    이렇게 바로 답장을 받는건 처음인것 같아요.
    개발자가 자기 사진을 넣는것 말고 아이폰 사용자가 자기 사진이나 그림을 넣는게 궁금해요.
    고마워요!

  6. Plateblack 2012.05.14 14:52  댓글주소  수정/삭제  댓글쓰기

    야곰님 강좌를 보며 Xcode로 프로그래밍을 하는데 푹 빠져있는 1인입니다^-^
    궁금한건 정말 많지만 하나만 꼽으라면... 음~
    아이폰과 데이터베이스를 연동해서 게시판을 만들어보는게 정말 궁금해요!
    웹서버 관련 지식이 너무 부족해서 어디서부터 손을 대야할지 막막하기만 하네요ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.14 15:39 신고  댓글주소  수정/삭제

      ㅎㅎ.. 그정도는 지금까지 배운거로는 아직 어림없어요...ㅎ
      그래서 차근차근 해보려고 합니다~
      조금은 시간이 걸릴 것 같아요~
      물론 많은 분들이 그 부분 정말 하고 싶어 하시는 것 알고 저도 처음에 많이 하고 싶었으니까요~
      하지만... 걷기도 전에 뛸 수는 없잖아요 ㅎ
      차근차근 같이 가보도록해요~

  7. NewBie 2012.05.23 15:12  댓글주소  수정/삭제  댓글쓰기


    이 내용은 이제 슬슬 서버와 연동이 되는 부분을 가르쳐주시려고 하시는건가요? +_+ 기대가 되네요 ㅎㅎ

  8. SODA 2012.06.29 10:28  댓글주소  수정/삭제  댓글쓰기

    열혈독자입니다. 덕분에 좋은 정보 알찬 정보 많이 습득하고 있습니다.

    감사합니다.^___________^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 11:19 신고  댓글주소  수정/삭제

      안녕하세요 SODA님~!
      오랜만에 덧글로 뵙네요 :-)
      자주자주 들러주시고 불같은 덧글 부탁드립니다 ㅎㅎ
      좋은 주말 보내시길...:-)

  9. 딴또 2013.03.11 14:53  댓글주소  수정/삭제  댓글쓰기

    정말 열심히 강의 보고 있습니다. 힘내십시오. 열심히 응원합니다.

  10. 나리 2013.05.02 09:43  댓글주소  수정/삭제  댓글쓰기

    쉽게 강의해주셔서 감사합니다^^
    많은 도움 되고 있어요!

  11. Favicon of https://pgspace.tistory.com BlogIcon 찌열남 2013.12.19 13:10 신고  댓글주소  수정/삭제  댓글쓰기

    처음으로 댓글 남깁니다.
    손가락물론 눌렀습니다 ㅎㅎㅎ
    잘보고 갑니다~

  12. 최현진 2016.05.13 09:49  댓글주소  수정/삭제  댓글쓰기

    항상 잘 보고 있습니다 ^^

  13. 진아 2016.05.25 01:08  댓글주소  수정/삭제  댓글쓰기

    늘 눈으로만 보고 갔었는데 오늘은 댓글을 남겨봅니다. 친절하고 자세한 설명이 큰 도움이 된답니다!!
    야곰 블로그 화이팅 입니당!!


오늘의 주제

1. 맵뷰 띄우기


열 일곱번째 시간입니다.^^

지난 번까지는 화면 전환 기법 몇 가지를 알아보았습니다.
화면 전환은 상황과 때에 맞게 그리고 사용자의 요구에 맞게 적절하게 사용하면 되겠습니다~^^

자 그럼 오늘은 지도(구글 맵)을 한 번 띄워보도록 하지요~
출발~~~~~~~~~~~~


# MKMapView


긴 말 필요 없습니다 ㅋㅋㅋ 바로 실습 들어갑니다.
당연히 지난번 까지 쓰던 프로젝트 그대로 사용합니다~

새로운 뷰 컨트롤러 생성을 위하여 Root폴더에서 우클릭(또는 컨트롤+클릭) 하여 New File...을 선택!


UIViewController Subclass를 선택하고 Next~!
아... 이제 다음부터는 이거 캡쳐 안해야지... ㅋㅋㅋㅋㅋㅋㅋㅋ 


이름을 MyMapViewController라고 해줍니다. 체크박스와 Subclass of를 잘 확인하세요~


자 뷰 컨트롤러가 생성되었으면 MyMapViewController.xib파일을 엽니다.


View위에 Map View를 끌어다 놓습니다. 자동으로 화면 전체에 들어갈거예요~


그 위에 버튼 세개를 살포시 얹어줍니다. 그리고 속성창에 들어가서 Alpha 값을 0.5로 설정해 줍니다~



그 후에 이제 SecondViewController.m으로 갑니다. 우리는 이 MyMapViewController를 SecondViewController에서 Modal View로 띄울 생각이거든요^^
자, SecondViewController.m으로 와서 새로 만든 MyMapViewController를 import해줍니다.


그 후에 아래로 내려와서 지난번에 만들어 놓았던 modalButtonClick메소드를 수정해 줍니다.


그리고 나서 실행을 해 봅니다~
짠! 잘 되시나요?ㅋㅋㅋ


안ㅋ돼ㅋ요ㅋ

빌드에서 에러도 없는데 왜 안될까요 도대체 ㅠㅠㅠ
자... 그럼 우리가 새로 추가한 녀석이 누군가 떠올려 봅시다.
우리가 처음 써보는건 분명히 Map View네요^^

개발문서에서 MapView에 관해 검색해 보았습니다.
Map View의 클래스 이름은 MKMapView입니다.

자... 개발문서에서 Class Reference를 보시면 사용하는 Framework와 사용가능한 버전, 그리고 선언되어있는 헤더가 나오네요~
MapKit.framework와 MKMapView.h 등을 데려와야 하겠군요~


자, 프로젝트를 클릭하고 아래와 같은 곳에 Linked Frameworks and Libraries가 있네요~
말그대로 링크된 프레임워크와 라이브러리가 있어요~
우린 지금 MapKit프레임워크를 추가해야 하므로 +버튼을 눌러줍니다~


MapKit.framework를 Add해줍니다~


자, 이렇게 추가 했으면 잘 실행이 될거예요~

그런데 맵에서 닫기버튼이 동작을 안하면 모달뷰를 닫을 수가 없죠~
이제 버튼 동작을 만들어 봅시다~^^
자, 이거 다 어떻게 하는지 아시죠??
모르면 이 아래 캡쳐에서 오른쪽 위에 Editor가 어떻게 되어있는지 확인해보시구요~
아래 빨간 화살표는, 버튼을 오른쪽버튼 또는 컨트롤 클릭해서 끌어오라는 말씀입니다~^0^


버튼 액션을 요따구로 연결 해주시구요~^^


나머지 두 버튼들도 연결 해줍니다~


또 맵뷰도 똑같이 끌어오는데, 요놈은 액션이 아니라 아울렛으로 연결해주셔야겠죠?^^
요로코롬 연결 해봅니다~


흐미~ 근데 이게 왠 에러!!??
에러 내용을 보니 MKMapView가 Unknown type이라네요..;
얘가 맵뷰를 인식하지 못하고 있어요!!!!!!!!!!!!
그럼 이럴땐 어떻게 해줘야 할까요? 고민고민.. +_+


자, 아까 위에 개발문서에서 MKMapView 클래스를 사용하려면 어떻게 해야 했죠?ㅎㅎ
프레임워크랑 헤더파일을 추가해야 했죠?
헤더파일을 살포시 추가해 줍니다.
이래서 개발문서가 중요하다 중요하다 하는거예요~ 혼자 하다가 모르면 구글보다 요놈이 백만배 빠를수도 있으니까요^^&


짜잔~~~~~~~~~~~~~~
맵을 보셨나요?ㅎㅎㅎ
(p.s 시뮬레이터에서 자신의 위치는 캘리포니아 애플 본사로 찍힙니다.)
아직은 밋밋하고 재미없네요~ 조금 더 해볼까요?


이번에는 내가 있는 곳의 위치를 알아보는 기능도 써보고 싶습니다~
프레임 워크중에 CoreLocation.framework를 추가해줍니다~ 


짜잔~ 추가해주고 아래와 같은 코드들도 입력해 줍시다~
참, 캡쳐에는 빨간 네모가 없지만 CoreLocation.h 헤더도 import해줍니다~


그리고 나서 SEOUL버튼을 누르면!!!???
지도가 뿅하고 오긴 오는데... 흐음... 확대도 안되고 재미가 없네요 ㅋㅋ


그래서 이동도 되고 확대도 되도록 코드를 조금 바꿔 넣어줘 봅시다~
코드에 대한 설명은 코멘트에^^


짜잔~ 이렇게 서울 시청으로 오네요 ㅎㅎㅎ 


그리고 드디어! 내가 있는 곳으로 지도를 움직이고 싶을 때..!! 어떻게 해야 하나???
showUserLocation메소드에 아래와 같이 입력합니다.
그런데 에러...ㅠ_ㅠ
또 뭐가 문제일까요..?


자... 문제에 봉착했다면..?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그렇죠 개발문서!
뭔가 의심되는 부분이 있다면 알트키를 누른채로 그녀석 위로 커서를 올리면 손꾸락 모냥이 나옵니다~ 클릭!
그리고 Class reference로 가보는거죠~


MKUserLocation이라는 클래스는MKUserLocation에 선언되어 있군요!?


그렇다면 <MapKit/MKUserLocation.h> 헤더를 추가해 주고 빌드해 봅니다~

그래도... 에러...ㅠ_ㅠ

또다시 의심가는 부분에서 개발문서를 살펴봅니다~ 그 결과 저는 이렇게 두개의 헤더를 추가해줬습니다~
왜 CoreLocation/CLLocation.h 헤더를 추가했는지 여러분들도 찾아 보아용~ 이힛~!ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
(-_- 이런 표정이 되셨다면 죄송...;)


그리고 코드를 이쁘게 적어주고 빌드해봅니다~
빌드성공!!


실행 해 봅니다~
ME, Close, SEOUL 버튼들이 모두 잘 동작하는지 확인합니다~^^*


하아... 힘드네요 ㅠ_ㅠ

이제 아울렛 연결이나 액션 연결... 클래스 생성 등의 소소한거는 캡쳐 그만해야겠어요..ㅋㅋㅋ

요렇게 짧은거 하는데 이미지 캡쳐만 30개..ㅋㅋㅋㅋㅋㅋㅋㅋ

휴휴, 다음에는 또 뭘 해볼까요?

여러분들은 뭐가 더 필요하신가요? 댓글달아주세요~ 진짜 그거 해보게요 ㅋㅋ

저도 맵뷰 처음 써봐서(그래서 개발문서 캡쳐가 많은 것일지도..ㅋㅋ) 부족한 점이 많은데요, 요청하시는게 있으면 배워서라도 포스팅 할게요 ㅋㅋ
 
그럼 이만 빠바이~


by yagom

twitter : @yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   

↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. Newbie 2012.05.22 16:05  댓글주소  수정/삭제  댓글쓰기

    저는 왜 ME 키를 누르면 에러가 날까요.. ㅠㅠ 어플이 잘 실행되고, Seoul, Close 키는 잘 먹는데 Me 를 누르면

    main.m 화일에서

    초록색으로

    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <<--- Thread 1 :signal SIGABRT


    라고 나오면서 작동이 안되네요 ㅠㅠ

    오타도 없는 것 같았는데 왜 그런지 모르겠네요 ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.22 23:36 신고  댓글주소  수정/삭제

      아무래도 오타 또는 xib에서 엉킨 것 같습니다...^^;
      메소드를 다시 잘 구현해 보시구요~
      xib파일 가셔서 File's Owner에서 우클릭 하셔서 액션이 잘 연결이 되어있는지, 물음표가 떠있는 노란색 액션이 없는지 잘 확인해 보시기 바랍니다..^^

  3. NewBie 2012.05.23 15:09  댓글주소  수정/삭제  댓글쓰기

    오오!! 역시 전지전능하십니다!!

    제가 shouUserLocation 이라고 오타를 쳤엇더군요 +_+!!!!!!!!!!!!!!!!!!!!!!

    그런데...

    왜 ME 를 누르면, south Pacific Ocean -_-... 이 나오게 되는걸까요...??

    이게 Simulator 로 할 떄는 어쩔 수 없는건가용??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.23 16:28 신고  댓글주소  수정/삭제

      아아 과찬이십니다^^;
      해결되셨다니 다행이네요~
      시뮬레이터에서는 위치정보를 활용 할 수 없기 때문에 자신의 위치로 이동하는 것이 불가능 합니다 ㅠ_ㅠ

  4. 유유 2012.06.17 10:40  댓글주소  수정/삭제  댓글쓰기

    iOS 처음배우는데 너무 힘들고 어려웠는데 여기서 다배우는거 같아요..

    너무 감사합니다..ㅠㅠ

  5. yjdk 2012.06.21 16:13  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좀 여쭤보고 싶은게 있는데요.
    앱에서 위치서비스를 사용자 동의없이 자동으로 활성화 시키는 것도 가능한가요?
    아니면 자동으로 활성화 시키면 안되는 규정이라도 있나요?
    아무리 찾아봐도 모르겠네요.
    알고계시면 좀 알려주세요~ㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.21 16:56 신고  댓글주소  수정/삭제

      사용자의 허가 없이는 그 무엇도 불가능 합니다... :-)
      그런 규정이 명시되어있는지는 모르겠지만, 사용자의 위치정보를 무단 수집하는 행위이므로 어플리케이션에서 임의로 사용자 위치정보를 사용할 수 없습니다.
      사용자가 허가 하여야 합니다.

  6. Sio 2012.07.17 12:45  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 오늘도 잘보고 갑니다~!
    오늘은 궁굼한 점이 있습니다.
    #import 를 할때 <Mapkit/MKMapView.h> 는 헤더파일에서 했는데 왜 다른 아이들은 구현파일에서 하나요.
    그냥 한군데서 한꺼번에 하면 문제가 되는 건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.18 00:02 신고  댓글주소  수정/삭제

      안녕하세요 Sio님 :-)
      예리한 지적이십니다 ㅎㅎㅎ
      설명하자면 길어질 것 같은데요, 지금같은 상황에서는 사실 어느쪽에서 하든 큰 상관은 없습니다.
      위의 예제같은 경우는 맵뷰를 인스턴스 변수로 사용하기 위하여 헤더파일에서 임포트 해 준 것이구요, 나머지는 굳이 헤더에서는 사용하지 않기 때문에 구현파일에서 임포트 해 준 것입니다..^^
      그 외에도 이유는 다양하지만 위의 예제의 경우에는 이렇습니다..ㅎㅎㅎ

  7. 박찬균 2012.07.25 13:40  댓글주소  수정/삭제  댓글쓰기

    안녕하세요?
    좋은 강좌로 많은 도움 받고 있습니다. 감사합니다.

    전 iOS 5.1에 Xcode 4.3.3을 쓰고있는데요,

    어째서인지..
    [myMapView setShowsUserLocation:YES];

    알려주신
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    에 넣지 않고
    - (void)viewDidLoad
    안에 넣어 줬을 때 위치 정보를 확인한다고 물어보고, 위치정보표시가 뜨면서 자기 위치를 취득해 사용할 수 있게 되었습니다.

    확인 부탁드립니다.

  8. jk 2012.09.03 13:22  댓글주소  수정/삭제  댓글쓰기

    대단하십니다. 저는 컴퓨터입문한지 3개월되었습니다. 그런데 초보가 봐도 알 수 있도록 설명해 주셔서 대단히 감사합니다.
    앞으로 많은 지도편달바랍니다.

    - 왕초보 -

  9. bji 2012.09.06 18:34  댓글주소  수정/삭제  댓글쓰기

    mapkit을 이용한 앱을 구현하고 있는데 많은 도움이 됬습니다.
    이 정보와 다른정보를 조합하여, 원하는 위치에 핀을 꽂고 눌렀을 시 팝업이 뜨는 것을 성공하였습니다.

    하지만 제가 궁극적으로 구현하고 싶은 것은
    핀을 클릭했을 때 핀 바로 위에 정보가 뜨는것이 아니라...

    화면 하단에 서브뷰 형식으로 선택한 핀의 이미지, 이름, 설명 등의 간단한 내용을 띄우려고 하는데요...

    서브뷰를 만들어서 핀을 선택했을 때 서브뷰를 보여지면서 정보를 갱신해야하는 것인지...
    아니면 다른 방법이 있는지 궁금합니다.

    xib가 아니라 storyboard으로 한 자료였으면 더욱더 좋았을 테지만...ㅠㅠ 스토리보드는 참 어렵고도 심오한거 같네요.ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:36 신고  댓글주소  수정/삭제

      한달이나 지난 뒤지만... 정확히 어떤 것을 원하시는 것인지 잘 감이 안오네요 ^^;
      벌써 시간이 흘러 다 해결되셨을까요?ㅎ
      스토리보드가 없어서 죄송합니다 ㅠㅠ

  10. ppange 2012.11.02 06:49  댓글주소  수정/삭제  댓글쓰기

    강의 잘 봤습니다..
    presentModalViewController 가 안되서 아래와 같이 바꾸었는데요..
    에러가 나네요.. (No visible @interface for 'SecondViewController' declares the selector 'presentViewController:animated:')
    어떻게 수정을 해야 할런지 통 모르겠어요.. ㅠ.ㅠ

    - (IBAction)modalButtonClick {
    MyMapViewController *myMapViewControllerForModal = [[MyMapViewController alloc]init];
    [self presentViewController:myMapViewControllerForModal animated:YES];
    }

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.02 16:35 신고  댓글주소  수정/삭제

      iOS6에서 메소드가 변경이 되었기 때문인데요~ 검색해 보시면 금방 찾으실 수 있을거예요 ^^
      http://winplz.tistory.com/203
      이곳을 참고하셔도 좋습니다 :)

  11. hyung 2012.11.08 15:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님~ 이번에도 좋은 글 감사합니다 많이 도움이 되었어요
    실례가 안되면 하나만 여쭤 봐도 될까요?

    혹시 맵자체에 그림을 삽입 할수 있나요?
    예를 들어 현재위치에 자기 얼굴이 나오는 사진 같은게 나온다던가..
    서울 좌표에다가 63빌딩 같은 그림이 지도상에 나오게 할 수 있나요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.09 11:17 신고  댓글주소  수정/삭제

      안녕하세요 hyung님~!
      제가 직접 해 본적은 없습니다만...
      아예 방법이 없을 것 같진 않습니다~
      iOS6의 3D 지도에선 또 어떨지 잘 모르겠네요 ^^;
      일단 부딪혀 보셔야 할 것 같습니다 ㅎ

      http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html#//apple_ref/doc/uid/TP40008205-CH3-SW41

      이 부분을 참고해 보시는 것도 좋을 것 같네요~:)

    • hyung 2012.11.09 13:10  댓글주소  수정/삭제

      감사합니다^^

  12. Min 2012.11.13 14:06  댓글주소  수정/삭제  댓글쓰기

    친절한 강좌 잘 보고 있습니다.
    하나하나 따라해 보고 있는 중인데요.

    왜 저의 경우엔 대개의 지명이 영어로 나올까요?
    게다가 지하철 정보 같은 것은 아예 나오지도 않는군요..

    버전의 문제인가요? 아니면 뭔가 추가로 설정해 줘야 하는 부분이 있는걸까요?
    답변 주시면 감사하겠습니다.

    -개발환경
    iMac osX 10.8.2
    XCode 4.5.2 ( 4G2008a )

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.13 14:42 신고  댓글주소  수정/삭제

      아마도 시뮬레이터 또는 기기의 iOS 버전이 6.0 이상의 버전이 아닌가 싶습니다. 6.0 버전으로 업데이트 되면서 지도가 변경이 되었어요.
      그렇지 않다면 시뮬레이터나 기기의 언어설정이 영어로 되어있지는 않으신지요~
      이 포스팅이 6.0버전이 출시되기 이전에 쓰여졌기 때문에 6.0 이상의 버전에서는 결과가 다를 수 있습니다 ^^;

  13. Min 2012.11.14 16:44  댓글주소  수정/삭제  댓글쓰기

    빠른 답변 감사드려요...
    시뮬레이터에서 확인해 보니 말씀하신대로
    언어설정이 영어로 되어 있어서 발생하는 문제였네요..
    이렇게 간단한 것을 감도 못잡고 있었다는데 약간 화가 나기도 합니다.. ㅜㅠ

    하지만, 지하철 정보가 여전히 뜨지 않는 것은
    그저 버전 문제인가 보다 하고 넘어가려고 합니다.
    그것 말고도 공부할게 넘 많아요. ㅋ

    다시 한번 감사드립니당~

  14. asrada 2012.11.17 13:55  댓글주소  수정/삭제  댓글쓰기

    정말 잘 보고갑니다~!
    TalbeView랑 합쳐보고 있는데 잘안되네요ㅠㅠ
    모달뷰 개념이 잘이해안되긴하는데...
    강좌몇강을 보면 모달을 완벽히 이해할수 있을까요?!?!?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:24 신고  댓글주소  수정/삭제

      모달뷰의 예로는, 아이폰 카카오톡에서 아이템스토어를 눌렀을 때 올라오는 화면같은 것입니다.

      http://blog.yagom.net/135
      http://blog.yagom.net/168
      을 확인해 보시구요, 구글에서 좀 더 검색해 보셔도 좋을 것 같아요 :)

      조금 더 정확히 어떤부분이 부족한지 집어주시면 더 설명해 드릴게요 ㅎ

  15. choboda 2012.12.10 11:57  댓글주소  수정/삭제  댓글쓰기

    정말 훌륭하시네요.. 감동

    (iOS 개발을 입문한지 일주일째)
    근데 iPhone 6.0 simulator에서 맵뷰를 실행시켜면 "Error Domain=NSURLErrorDomain Code=-1004 \"Could not connect to the server" 란 메시가 계속 나오네요

    그리고 시뮬레이터에는 지도가 나타나지 않네요.. 원인을 잘 모르겠습니다.
    뭐가가 문제죠?

  16. 마스터 2013.01.12 22:04  댓글주소  수정/삭제  댓글쓰기

    이거 폰에서해도 ME 가 지중해 가운데로 나오네요 ;; 어떻게 해야할까요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.13 22:14 신고  댓글주소  수정/삭제

      폰에 로케이션 기능이 켜져있는지 확인하시구요, 처음 앱을 구동할때 위치정보 허용을 하도록 설정하셨는지 확인해 보세용.
      iOS6라면, API등이 변경되서 정상동작 하지 않을 수 있으니 도큐먼트를 참고해 보세요^^

  17. 2013.02.24 04:44  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  18. 딴또 2013.03.11 14:47  댓글주소  수정/삭제  댓글쓰기

    감사합니다

  19. seungjae 2013.08.07 04:57  댓글주소  수정/삭제  댓글쓰기

    2013-08-06 15:53:57.850 UiTest_Buttons_Tabview[2681:907] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MapViewController 0x1d0658c0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key closeModal.'


    이건무슨에러일까요.. 도무지 알수가없네요..

  20. abcBEAR 2013.09.05 21:41  댓글주소  수정/삭제  댓글쓰기

    iOS 6.1버전을 사용하고 있습니다.
    윗 분이 말씀하신 것 처럼
    [mapView setShowUserLocation:YES]; 함수는
    init이 아니라 viewDidLoad에 입력 해야 정상 동작하는 것 같습니다.

    좋은 강좌 항상 잘 보고 있습니다.
    감사합니다.

  21. Bro 2013.11.09 23:19  댓글주소  수정/삭제  댓글쓰기

    시청에 위치 지정핀을 표시하고 싶은데. 어떻게 해야 하나요?!

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.11.11 09:47 신고  댓글주소  수정/삭제

      google에서 mapkit pin이라고 검색 또는
      http://stackoverflow.com/questions/2699171/how-do-i-add-custom-pins-to-the-iphone-mapkit
      를 참고하시면 될 것 같습니다 :)


오늘의 주제

1. 네비게이션 컨트롤러를 이용한 화면전환 
2. ModalViewController 사용하기 



열 여섯째 시간입니다.^^

정말 오랜만의 포스팅입니다.ㅠㅠ
일단 감격의 눙물을 좀 닦고..ㅠ

요즘 제가 서식지를 좀 옮기기도 했고 이런저런 일들이 많이 겹쳐서 이제서야 짬을내 포스팅을 하네요ㅠ_ㅠ

맥북도 재구매 하였습니다 !

그럼 사설은 여기까지..ㅋㅋ

지난 번에는 addSubview:, removeFromSuperview, setHidden 등을 알아보았습니다.
개념이해는 잘 되셨는지요?
위에 메소드들은 개발문서를 보면 아시겠지만 view를 떼었다 붙였다 없앴다 보였다 하면서 화면을 바꿔줄 수 있는 녀석들입니다.

하지만 이번에는 view controller를 인자로 받아서 처리하는 메소드들을 다뤄봅니다.

물론 개념이 확립되어 계신 분들이라면 view controller자체는 화면에 보이지 않는다는 사실은 알고 계시겠지요? ^^*
어찌되었든 화면에는 view controller 안에 속해있는 view가 보이는 것이지요.

이해가 안되시면 이전 포스팅 :
2011/11/15 - [iOS Dev/함께해보기] - iOS개발하기 #7. 화면구조, Cocoa Touch Objects (2) 을 참고하세요~

자, 출발해 볼까요?ㅎ


# 네비게이션 컨트롤러 생성

자 지난번에 사용했던 프로젝트를 그대로 사용 합니다~

일단 두번째 탭의 화면을 네비게이션 컨트롤러 화면으로 바꿔 보겠습니다.

말이 좀 애매하긴 한데요, 일단 해봅시다^^

AppDelegate 구현파일로 가 봅니다.

우린 Second탭의 화면을 네비게이션 화면으로 바꿔주려 하는 것입니다.
아래 코드를 보면 viewController1과 viewController2가 생성되고 탭바 컨트롤러의 viewControllers에 세팅이 되고 있는것을 볼 수 있습니다.
자, 그럼 우리가 바꿔줘야겠죠? 

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile27.uf@121721474F60C3A406BA43.png%7Cwidth=%22824%22%20height=%22547%22%20alt=%22%22%20filename=%221.png%22%20filemime=%22image/jpeg%22%7C_##]
아래와 같이 코드를 살짝 바꿔줘 봅니다.
우리는 네비게이션 컨트롤러 myNaviViewController를 생성해서 viewController를 rootViewController로 설정하여 초기화 했습니다.
그 후에 viewController2대신에 탭바컨트롤러의 뷰컨트롤러에 넣어줍니다. 


실행서 보면 짜잔~~~~~~
네비게이션 컨트롤러가 대신 들어갔습니다.
어떻게 아냐구요? 파란 막대가 생겼죠?
근데 이게 네비게이션 컨트롤러가 생긴거라고는 확신할 수는 없어요.
그럼 네비게이션 컨트롤러의 동작을 확인해보면 확신할 수 있겠네요?
네~ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
 

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile10.uf@171721474F60C3A708BDF7.png%7Cwidth=%22396%22%20height=%22744%22%20alt=%22%22%20filename=%223.png%22%20filemime=%22image/jpeg%22%7C_##]
# push, pop viewcontroller 그리고 modal viewcontroller
 

자, 그럼 이제 동작을 하게 만들어 봅니다.
일단 SecondViewController.xib에 버튼 두 개를 올려놓고 이름을 이쁘게 넣어줍니다~


자, 그럼 버튼에 연결될 메소드를 생성해 줘야 하는데요, 저번에 소개해 드린바와 같이 이렇게도 생성이 가능합니다.
버튼에서부터 헤더파일의 interface내부에 오른쪽버튼(또는 컨트롤키)를 누른상태로 드래그 앤 드랍!!
그리고 Connection은 Action으로 해주시고, 이름은 이쁘게^^ 지금은 너무나 간단한 기능을 구현할 것이기 때문에 Arguments는 None으로 해줍니다. (Argument에 대한 자세한 설명은 다음에...^^)


헤더 파일에 보면 이렇게 이쁘게 정의되어있는 것을 확인할 수 있습니다.


게다가 구현파일에 와서 보면 거기에도 이쁘게 메소드가 만들어져 있습니다 ㅎㅎㅎ 아이 좋아~

그 속 안을 알차게 채워넣어 봅시다~^^


pushButtonClick메소드 안에는 임시 뷰 컨트롤러 하나를 생성해서 검은색 배경으로 설정을 해주어서 pushViewController 메소드를 실행합니다.
여기서 [self navigationController]는 이 SecondViewController를 컨트롤 해주는 네비게이션 컨트롤러를 뜻합니다.(우리 아까 AppDelegate에서 만들어 주었었죠?) 그녀석에서 새로운 뷰 컨트롤러를 집어넣겠다고 말해주는 겁니다. 

modalButtonClick메소드 안에는 네비게이션 컨트롤러를 이용한 것이 아닌 모달 뷰를 이용한 화면전환을 구현합니다.
모달 뷰가 뭐냐구요? 백이면 백 그냥 이따 실행해 보시면, 아~~~~~~~ 이거~~~~~~~ 하십니다.ㅋㅋㅋ
여기서는 약간 다른것이 아래 버튼을 코드로 구현해 놓은 부분인데요... 제가 뷰 컨트롤러 xib파일 하나를 더 만들기 귀찮아서 그런건 절대절대 아니구요..ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그냥 버튼을 코드로 넣게되면 이렇게 넣는구나~~~ 그냥 한번 보시라고 넣어보았습니다. 암~ 그럼요~ 한번 쓰고 버릴 뷰 컨트롤러 xib파일 만들기 귀찮아서 그런거 절대 아녜요 ㅋㅋㅋ
여하튼 
presentModalViewController: animated: 메소드를 사용하여 모달뷰를 화면에 올릴 수 있습니다.
아래 버튼구현부에서 addTarget을 보시면 @selector안에 dismissModalViewControllerAnimated: 메소드가 들어가 있는 것을 보실 수 있습니다.
메소드 이름만 봐도 아~~~~~~~이게 뭐구나~~~~~~ 눈치 채셨길 빕니다. ㅋㅋㅋ

그럼 실행해 봅시다~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile29.uf@1571B23D4F60C8153A8C3C.png%7Cwidth=%22396%22%20height=%22744%22%20alt=%22%22%20filename=%228.png%22%20filemime=%22image/jpeg%22%7C_##]
Modal 버튼을 눌렀을 때 Modal이 올라온 상태입니다.


Push버튼을 누르면 네비게이션 컨트롤러가 tempViewController 인스턴스 하나를 화면에 push합니다.
상단에 Second버튼은 Second 화면으로 pop 한다는 뜻이겠지요?ㅎ
화면을 push하면 pop해서 다시 뒤로 갈 수 있는 것입니다.
 


오늘 포스팅은 제가 쓰고도 뭐라고 횡설수설 했는지 모르겠습니다...

정말 정신없이 썼네요.

피곤해 죽겠어요ㅠㅠ

여튼 요거 개념 잘 해두시면 유용하실 거에요~

궁금한 것은 댓글 남겨주세요^^* 

어쩌면 생각보다 빨리 답변이 올라올지도 모르잖아요?ㅎㅎ


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. Elian 2012.03.15 21:50  댓글주소  수정/삭제  댓글쓰기

    오늘 바빠서 못 보고 있다가 지금 딱! 들어오니 새 글이 딱!!

    잘 읽었습니다. 감사합니다 ^^

  2. Berry 2012.04.27 16:44  댓글주소  수정/삭제  댓글쓰기

    계속해서 강좌 잘 보고있습니다
    하나 궁금한게 생겼습니다!
    정말 간단한 부분일지도 모르겠지만
    PushButtonClick에서 검은색 바탕의 뷰를 생성하여서
    새로 뿌려주는것까진 알겠는데
    어느부분에서 Second라는 아이콘을 만들며 뒤로 돌아가는 기능을 하게하는지 이해가 잘 가지않습니다
    네비게이터를 설정하면 저절로 네비게이터바에서 처리해주는건가요 ?
    아니면 다른곳에 숨겨져 있는 기능인가요 설명좀 부탁드릴꼐요 !

    한가지만 더 질문 드릴꼐요
    버튼에 걸어둔 옵션(터치 업 인사이드 같은)을 해제시키려면 어떻게 해야하나요 ?
    혼자해보려다가 잘 안되서 급기야 버튼을 지우기까지 해봤는데 아직도 모르겠네요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.27 18:00 신고  댓글주소  수정/삭제

      1. 네비게이션 컨트롤러에서 자동으로 BackButton이 생성이 됩니다~^^ 물론 이 버튼도 커스터마이징 가능합니다.

      2. xib파일 안에서 말씀하시는 건가요? 아님 코드상에서 말씀하시는 건가요?
      음.. 위의 예제에서 본다면 xib에서 File's Owner 녀석을 우클릭 해보면 연결되어 있는 메소드 들이 나옵니다. 거기에 마우스를 올리면 옆쪽에 x표시가 생길거예요. 그녀석을 누르면 연결된 메소드가 해제 됩니다.

      위 예제상에서 해본 것은 아니지만 혹시나 해서 코드상에서 없애려면
      - (void)removeTarget:(id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents
      메소드를 사용하시면 됩니다~^^

      충분히 설명이 되셨는지 모르겠네요..^^
      궁금하시면 언제든지 말씀해 주세요 ㅎ

    • Berry 2012.04.28 02:39  댓글주소  수정/삭제

      아하 그렇게 되는거였군요 ㅎㅎ
      친절한 설명 감사드립니다
      지금은 해볼수가 없고
      내일 아침에 바로 해보고
      안되는건 여쭤봐야겠네요 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.30 09:56 신고  댓글주소  수정/삭제

      잘 해결 되셨는지 모르겠네요~^^
      또 들러주세요 ㅎ

    • Berry 2012.05.02 12:41  댓글주소  수정/삭제

      잘 해결되었습니다
      사정이 생겨 오늘에서야 해보는군요 ㅎㅎ
      오늘도 으쌰으쌰 힘을내며
      강좌 하나씩 밟아나가겠습니다 !
      좋은하루되세요 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.02 13:12 신고  댓글주소  수정/삭제

      잘 해결되셨다니 정말 다행입니다~^^*
      좋은 하루 되시길~!

  3. 인절미후후 2012.05.21 15:00  댓글주소  수정/삭제  댓글쓰기

    이글에만 추천이 적네요 ㅎㅎ
    한 세번 넘어가는것 같은데 다시 볼수록 새로운 걸 알게 되는거 같아요 ㅎㅎ 잘보고 갑니다.

  4. 밤가시 2012.05.28 19:36  댓글주소  수정/삭제  댓글쓰기

    강좌 하나하나 정주행해서 실습해보고 있는데요..
    이 강좌에서 Close 버튼을 직접 구현한것 같이
    Push 버튼을 눌렀을때 tempView 의 Back 버튼도 구현해 보고 싶어서 아래와 같이 modal버튼에 있는 것을 약간 응용했습니다.

    UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [closeButton setFrame:CGRectMake(50.0f, 50.0f, 220.0f, 70.0f)];
    [closeButton addTarget:tempView action:@selector(popViewControllerAnimated:) forControlEvents:UIControlEventTouchUpInside];
    [closeButton setTitle:@"Back" forState:UIControlStateNormal];
    [tempView.view addSubview:closeButton];

    push 했으니깐 버튼 눌렀을때 Pop 해야 할것 같아서 selector의 action 을 저렇게 지정하였는데
    계속 에러를 내면서 죽어버리네요.
    어떻게 구현해야 하나요?? ^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.28 23:44 신고  댓글주소  수정/삭제

      ^^* 질문주셔서 고맙습니다~!
      이미 해결하셨을지 모르겠지만 버튼의 타겟이 잘못되었네요~!
      해당 메소드의 타겟은 뷰 컨트롤러가 아니라 그 뷰 컨트롤러를 컨트롤하는 네비게이션 컨트롤러 입니다.
      그러므로 타켓에 네비게이션 컨트롤러가 들어가야 맞습니다.^^*

  5. Favicon of http://www.freeism.co.kr BlogIcon freeism 2012.06.05 11:25  댓글주소  수정/삭제  댓글쓰기

    버튼 이벤트 생성할 때, 계속 오류가 나서 봤더니..

    - (IBAction)pushButtonClick: (id)sender;
    - (IBAction)modalButtonClick: (id)sender;

    로 해주면 정상적으로 동작하네요. xcode 버전 문제일지도 모르겠네요^^

  6. 궁금궁금 ~~ 2012.06.12 17:57  댓글주소  수정/삭제  댓글쓰기

    xcode 쌩초보 입니다 이렇게 저렇게 이해해보면서 따라하고 있는데
    modal버튼을 누르면 아래와 같은 에러와 함께 어플이 죽어 버리네요
    2012-06-12 17:50:51.263 ChangeViews[6215:f803] -[SecondViewController ModalBtnClick]: unrecognized selector sent to instance 0x688d680
    2012-06-12 17:50:51.325 ChangeViews[6215:f803] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SecondViewController ModalBtnClick]: unrecognized selector sent to instance 0x688d680'
    어떤점이 잘못 된 걸까요 몇번이나 봐도 소스는 똑같은데..ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.12 18:44 신고  댓글주소  수정/삭제

      SecondViewController.h에서
      - (IBAction)pushButtonClick:(id)sender;
      - (IBAction)modalButtonClick:(id)sender;

      SecondViewController.m 에서도
      - (IBAction)pushButtonClick:(id)sender;
      - (IBAction)modalButtonClick:(id)sender;
      로 변경해 주시구요...ㅎ

      만약에 그렇게 해도 되지 않으면... 처음부터 다시...^^; 는 농담이구요 ㅋ

      SecondViewController.xib 파일에서 File's Owner를 오른쪽 클릭한 후에 버튼에 연결되어있는 액션을 없애주시고 다시 한 번 연결해 보시기 바랍니다.

      혹시 안되면 다시 댓글주세요^^;

  7. 컴맹 2012.08.24 01:02  댓글주소  수정/삭제  댓글쓰기

    전 운이 좋은지 에러 없이 잘되네요 ㅎㅎ (잘 되도 불안하군요)
    다음 강좌인 map view 를 하려고 하는데 이번강좌의 소스를 사용한다고 해서 복습할겸 다시 와서 보고 갑니다~~
    덕분에 더 잘 알게 되었네요 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 10:02 신고  댓글주소  수정/삭제

      안녕하세요 컴맹님~
      ㅎㅎ 잘 되도 불안한 것은 정말 좋은자세입니다 ㅎㅎㅎ
      언제 어디서 버그가 튀어나올지 모르니 항상 확인하고 또 확인해 봐야겠지요 ㅎㅎㅎ
      찾아주시고 덧글 주셔서 정말 고맙습니다:)
      또 놀러오세용 ㅎㅎ

  8. chosamong 2012.08.26 13:58  댓글주소  수정/삭제  댓글쓰기

    정말 정말 감사합니다.
    강좌를 차근차근 따라가면 정말 정말 기본기 튼튼한 자신을 보게 될 것 같은 기대감 ~ ^^;

    그런데 저는 왜 IB화면과 코드화면 나누기가 상하로만 되지요 ?
    야곰샘처럼 좌우로 놓고 싶은데 어떻게 하는지 모르겠어요.

    강좌는 진짜로 정말로 감사합니다. 꾸우벅 <(__)>

  9. 꾸앵 2012.10.11 11:46  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    ios 입문 3일차 초보 개발자입니다.
    현재 xcode 4.0 버전을 쓰고 있고 ios application 에서 windows-based application 으로 프로젝트 생성후

    탭바를 만들었습니다.
    4개의 탭 중에 3번째 탭에 모달뷰를 띄워서 로그인창을 넣고 로그인이 되면 모달뷰를 내리는 방법으로 프로젝트를 진행하려 하고있습니다.
    헌재 탭바 아이템번호를 찾아서 해당 번호일때는 모달뷰를 띄우게 코딩진행중인데
    모달버튼 클릭시 실행되는 코드를 그쪽으로 옮겼습니다
    헌데 self presentModalViewcontroller:tempViewCon animated:YES 에 노란줄이 가 있습니다.

    모달뷰를 만들고 쓰지 않았다는거 같은데 왜 그런걸까요...
    ios입문 3일차라... 모르는게 너무 많아요 ㅠ

    버전마다 너무 틀려서 강의를 봐도 다른게 많고...
    view-based windows-based 스토리 보드.. 당최 내가 할려는걸 어떤걸로 해야하는지도 모르겠고 ㅠㅠ
    @_@

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.11 17:32 신고  댓글주소  수정/삭제

      안녕하세요 꾸엥님 :)
      블로그를 방문해 주셔서 정말 고맙습니다.

      사용하신 메소드는 iOS6에서 사라진 메소드이기 때문에 경고가 뜨는 것 같습니다.

      iOS가 변경됨에따라 사라지거나 생기는 메소드들이 있습니다. 그 중에 하나라서 iOS6 이전에서는 동작하지만 iOS6부터는 동작하지 않습니다.

      http://winplz.tistory.com/entry/xCode-45-for-iOS-60-%EB%8B%AC%EB%9D%BC%EC%A7%84-%EC%A0%90

      이 포스팅을 참고해 보시면 도움이 될 것 같습니다 ^^*

    • 초보자99 2012.12.09 18:06  댓글주소  수정/삭제

      저도 같은 증세인데 링크 참고해도 어떻게 해결해야될지 모르겠습니다
      ㅠㅠ 솔루션을 제공해주시면 좋겠습니다.
      ------------------
      아 그래서
      [self presentViewController:tempViewCon animated:YES completion:nil];
      이렇게 수정했습니다. 따로 빨간글자나 노란글자는 보이지않습니다만, 괜찮은걸까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.09 22:19 신고  댓글주소  수정/삭제

      네~ 맞습니다:)

  10. kimsdn 2012.11.25 06:04  댓글주소  수정/삭제  댓글쓰기

    복습중인데.. 한가지 질문드릴께요

    닫기버튼을 하드코딩 하지않고 xib파일에서 직접 만들고 붙일경우

    액션을 어떻게 줘야하나요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.25 20:12 신고  댓글주소  수정/삭제

      지금 올라온 모달뷰 같은 경우는 컨트롤러 자체도 코딩으로 만들어 줬기 때문에 버튼도 코딩해 준것이구요, 만약에 뷰컨트롤러 자체는 xib로 만들게 되면 위쪽의 2,3번 캡쳐 화면과 같이 연결해 주시면 됩니다.
      물론 버튼을 따로 빈 xib파일에 넣어서 하는 방법도 있지만, 보통 그런방법은 매우 귀찮아지고 머리아파지고 잘 사용하지 않기 때문에 생략하도록 하겠습니다..^^;

  11. hyung 2012.12.07 09:42  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야곰님! 질문하나 드리겠습니다.

    저는 지금 UIViewController -> UITableViewController로 pushViewController 하고 싶은데 어제부터 잘 안되네요 ㅠㅠ

    저기 델리게이트 선언부분에
    sel.tabBarController들어간 부분 있잖아요..?
    아마 그쪽을 잘못 선언 해준거 같은데
    탭바가 아닌 경우는 뭐라고 해줘야 할까요?

  12. 헌트리스 2012.12.07 10:33  댓글주소  수정/삭제  댓글쓰기

    초보 질문입니다!!

    modalClickButton 만들 때,

    클릭버튼을 하면 새로운 모달창이 뜨는 거라고 생각하면 되죠?

    modal 이라는 개념이, 새로운 UIViewController 창을 띄우는 것인가요?

    push 와 modal 의 용어 정의 차이를 잘 모르겠습니다 ㅠ


    그리고,

    presentModalView... 이 명령어가 안먹힌다고 하여

    [self presentViewController:(UIViewController *)tempViewcon animated:YES completion:nil];

    로 수정하였습니다. 그런데 닫는 부분에서

    [closeButton addTarget:tempViewCon action:@selector(dismissViewControllerAnimated:YES completion:nil) forControlEvents:UIControlEventTouchUpInside];

    로 적었는데 에러가 나는군요 ㅠ 이 부분 수정을 어떻게 해야 하나요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.07 19:30 신고  댓글주소  수정/삭제

      [closeButton addTarget:tempViewCon action:@selector(dismissViewControllerAnimated: completion:) forControlEvents:UIControlEventTouchUpInside];

      으로 해보세요:)

  13. Aldo 2012.12.17 12:32  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 너무고맙게 잘 보고 배우고있어요~^^
    질문 하나 할개요, 질문같지도 않은 질문이겠지만...
    첫번째로 올리신 이미지에서, 빨간상자 안의 아랫부분에

    self.tabBarController.viewControllers = [NSArray arrayWithObject:viewController1, myNavyViewController????, nil];

    ????여기에 들어가는 문자가 대체 뭐에요?? 1도 아니고 l도 아니고 !도 아니고, ...
    제가 사정상 아이패드로 게시글을 보는데, 해상도가 안따라줘서 저 문자를 제대로 못보여주는지도 모르겠지만...
    암튼, 모르겠어요 뭔글씨인지ㅠㅠ

  14. 김민국 2013.01.30 19:32  댓글주소  수정/삭제  댓글쓰기

    좋은강좌보고 열심히 공부하고있습니다!
    너무감사해요!^^

    질문하나 드릴게요 ㅎㅎ

    - (IBAction)pushButtonClick {

    UIViewController *tempViewCon = [[UIViewController alloc] init];
    [tempViewCon.view setBackgroundColor:[UIColor blackColor]];
    [[self navigationController] pushViewController:tempViewCon animated:YES];
    }

    여기서 self navigationController 이부분에서 네비게이션 객체가 있는데
    AppDelegate에서 secondViewController를 네비게이션컨트롤러에다가 추가해줬자나요

    이부분때문에
    세컨드뷰컨트롤러 객체에 네비게이션 객체가 있는건가요???

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.31 20:34 신고  댓글주소  수정/삭제

      어떤 뷰 컨트롤러 객체가 네비게이션 컨트롤러에 push되면 자동으로 그 객체의 네비게이션 컨트롤러 프로퍼티에 등록되게 됩니다 ㅎ

  15. 퐝칭칭 2013.03.28 15:52  댓글주소  수정/삭제  댓글쓰기

    이번 강좌도 잘보고갑니다 ^^ 추천꾸욱~
    근데 저는 modal view 화면에서 버튼안에 close 텍스트가 안뜨네요
    디버깅 과정에서

    경고 메시지 : 'presentModalViewController.animated:'is deprecated: first deprecated in iOS 6.0

    이렇게 뜨고요 이거 버전문제 때문인가요 ?
    아님 버전이랑 관계없이 다른문제 인가요 ?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.03.29 03:26 신고  댓글주소  수정/삭제

      덧글 고맙습니다 :)

      버튼 안에 글씨가 나오지 않는 것은 버전에 큰 관계가 없을거예요.

      혹여 오타가 있나 유심히 살펴보세요~

      경고메세지가 출력되는 이유는 iOS 6.0 부터 사라진 메소드를 호출했기 때문입니다.

      [self presentViewController:tempViewCon animated:YES completion:^(){}]; 으로 작성해보시면 경고문구가 없어질 거예요..ㅎ

      그리고 버튼또한 dismissModalViewControllerAnimated: 가 아니라

      dismissViewControllerAnimated:completion: 으로 바꿔서 넣어보세요~

  16. Hide 2013.11.11 21:36  댓글주소  수정/삭제  댓글쓰기

    감사합니다.


오늘의 주제

1. 뷰 위에 뷰 얹어보기 


열 다섯번째 시간입니다.^^

지난 번까지는 네비게이션 컨트롤러에 대해 알아보고, 주석다는 방법에 대해 좀 알아보았습니다.
요즘들어 너무 바빠서 몸이 다섯개라도 모자랄지경입니다 ㅠㅠ 포스팅도 너무 뜸한거 같아 슬프네요 ㅠㅠㅠ

자 그럼 오늘은 화면을 바꿔보는 방법 중에 하나인 뷰 얹고 없애기를 한 번 해보도록 할게요~
스따뚜~~~~~~~~~~~~


# 새로운 프로젝트 생성

지난 번 까지는 iOS5에는 최적화되지 않은 코드였습니다. 물론 최적화되지 않은 코드들에 대한 설명은 거의 하지 않았으니 헷갈릴까 걱정하실 필요는 없습니다용 ㅎㅎ

일단 새로운 프로젝트를 생성합니다~

Tabbed Application 을 선택합니다~

이 프로젝트로 꽤 오랜시간 포스팅 진행하게 될 듯 합니다 ㅎㅎ


저는 프로덕트 이름을 ChangeViews 라고 해줬습니다!

그리고 여기서 지난번이랑 다른점은 Use Automatic Reference Counting에 체크하는 거예요~ 



짜잔~ 프로젝트가 만들어 졌습니다요 ㅎㅎ


한 번 실행시켜 볼까요?ㅎ

지난 번과 똑같이 두 개의 탭을 가진 탭 기반 어플리케이션이 자동으로 생성되어 있네요 ㅎ



화면 좌측에 네비게이션영역의 ChangViews그룹에서 우클릭 또는 Ctrl+클릭을 하여 New File...을 선택하여 줍니다.



그 후에 ThirdViewController라는 이름의 뷰컨트롤러 하나를 만들어 줍시다.
 


자, 그 후에 FirstViewController.xib 파일로 이동합니다. 그리고 우측 아래쪽에 Objects 중에 View를 살짝 끌어서 First View 위가 아니고 격자모양처럼 표시되어있는 FirstView '바깥'영역으로 끌어옵니다.



그러면 네모칸 안에처럼 view와 view가 서로 포함되지 않게 나오게 됩니다~ 즉, 원래있던 View안에 새로 넣은 View가 포함되지 않게 해야 합니다 ㅎ
그리고 오른쪽 메뉴중에 자 모양으로 생긴 메뉴로 가면 뷰의 크기를 조절할 수 있어요~ 280 * 100으로 만들어줘 봅시다~


속성탭으로 가서 배경색은 검은색으로 바꿔주구요~



Objects에서 Round Rect Button 하나를 쭈욱 끌어옵니다. Title은 Remove로 바꿔보았습니다~ 이 버튼을 누르면 이 뷰가 뿅하고 사라질 때 쓰일거예요 ㅎㅎ


그리고 원래 있던 FirstView쪽에 Add라는 Title을 가진 Round Rect Button 하나를 만듭니다~ 이 버튼은 새로운 뷰를 위에 얹을 때 쓸거구요 ㅎ


이왕 이렇게 된거 숨기기 보이기 버튼도 하나씩 만들어 봅시다~


이제 메소드를 만들어 주어야겠죠?ㅎ
FirstViewController.h 헤더로 옵니다.
아래와 같이 코드를 넣어봅시다~

@property 줄은 새로 만들어진 View랑 연결해 줄 녀석이구요~

그 아래 메소드 네개는 버튼들과 연결해줄 녀석들입니다.


이제 구현파일 FirstViewController.m으로 와서 

@property했으니, @synthesize로 받아주어야겠죠?ㅎ

그 아래 메소드 네개를 구현해 줍니다.

여기서 잠깐! #pragma mark - View Control Methods 라고 써놓은 부분!

이건 말 그대로 마크 해놓는 건데요~

요기 표시해 놓은 부분부터 다음 표시 부분까지는 View Control Method 라고 개발자가 표시해 놓는 겁니다.

요렇게 만들어 놓으면 나중에 코드가 아무리 길어져도 관련 메소드들을 쉽게 찾아 볼 수 있어요^^

어떻게 찾냐구요?

화면 중간 위쪽을 보시면 지금 빨간 네모 만든 부분을 클릭해 보세요~ 다들 눌러보실 것으로 알고 다음 설명은 생략합니다^^ 눌러보시면 답 나오거든요 ㅎ


이제 아까 구현해 놓은 녀석들을 연결해 줄 차례입니다~
File's Owner에서 우클릭 또는 Ctrl+클릭 으로 드래그 앤 드롭으로 새로 만든 View로 끌고옵니다~


Outlets에 onView에 클릭!


정상적으로 연결이 되면 앞에 동그라미가 생겨요~


이제는 반대로 File's Owner에서 오는게 아니라 버튼을 오른쪽버튼 드래그 앤 드롭 합니다. 또는 Ctrl키를 누른 상태에서 드래그 앤 드롭!
 



Add버튼이니까 addView와 이벤트를 연결합니다.


자, 그런데 이 방법 말고 또 다른 방법들을 소개합니다~!
이벤트를 연결하기를 원하는 버튼에서 우클릭! 또는 Ctrl+클릭!
하게되면 아래 그림과 같이 Event와 Outlet 등을 연결할 수 있는 참이 똻!!!!!!!!!!




그러면 자신이 원하는 이벤트 또는 아울렛의 오른편에 보이는 빈 동그라이 있지요?
거기서 누르고 File's Owner쪽으로 드래그 앤 드롭 해봅니다~  버튼은 통사아Touch Up Inside 이벤트를 주로 사용합니다.


그 반대로 File's Owner쪽에서 우클릭 또는 컨트롤 클릭하여 연결해 주는 방법도 있습니다~!


이벤트는 Touch Up Inside로~! 물론 다른거 해보셔도 됩니다 ㅎㅎ 어떤 결과가 나오는지 직접 해보세요^^
이렇게 세가지 방법을 소개해 드렸습니다~ 이 세 방법중에 편한 방법을 골라서 쓰시면 될 것 같네요 ㅎ


자, 정상적으로 다 연결되고 난 후에 File's Owner를 우클릭 했을 때 뜨는 창의 모습니다.
전부 잘 연결 되셨나요?^^


자, 제대로 다 되셨으면 실행시켜 봅시다~

과감히 Add버튼을 클릭!!
 

오이잉??
창이 지멋대로 이상한데 붙어버리네요 ㅎㅎ
제대로 잘 붙도록 조정해 줘야겠네요~


자 FirstViewController.m 구현파일로 이동합니다~

addView 메소드에서 한 줄을 더 추가해 줍니다~


자~ 다시 실행~~


이쁘게 잘 나오나요?ㅎㅎ



자, 그럼 여기서 동작을 잘 살펴봅니다~!

Add버튼으로 화면 위에 붙인 녀석은 Remove로도 화면에서 없어지고, Hide로도 없어집니다! 그쵸?

그런데 Hide로 없어진 녀석은 Add해도 다시 나타나질 않습니다~

그리고 Remove로 없애고 나서 Show해도 안나타 납니다!!

오이잉??? 도대체 왜 이런일이???

똑같이 화면에서 없어지고 나타났는데, 동작이 될때가 있고 안될때가 있다???

애매~~~~~~합니다잉~~~~~~

자, 잘 생각해 봅시다용 ㅎㅎ

아까 작성해둔 코드를 보게 되면

addView: 메소드 안에는

addSubview: 라는 메소드가 들어가 있습니다.

이말인 즉슨, 어떠한 view위에 sub(하위) view를 추가하겠다.

말 그대로 '새로운 하위 뷰를 얹어넣겠다' 라는 뜻이겠죠?

하지만 showView: 메소드 안에는 setHidden: 이라는 메소드가 사용된 것을 보게 됩니다.

말 그대로 '숨기지 않겠다!' 이런 뜻이겠죠? 



자, 다시 생각해 봅니다!

addSubView는 원래 없는 녀석이 새롭게 뷰 위로 얹혀진다는 것을 알게 됩니다!
하지만, Hidden은 말 그대로 투명으로 없어져 있어서 눈으로만 안보일뿐 원래 있는 녀석이 보이게 되는 것 뿐입니다!


그 반대로 생각해 봅니다~

removeFromSuperview메소드는 있던 녀석을 뷰 위에서 아예 없애버는 것이구요,

hidden해버리면 우리 눈에만 안보이고 뷰 위에 계속 얹혀있는 상태가 되는 겁니다.


그렇기 때문에 add버튼보다 show버튼을 먼저 누르게 되면, 새로운 뷰가 얹혀져 있지 않은 상태이기 때문에 화면에 나타나지 않게 되는 것이고,

hidden으로 숨겨놓고 add해버리면, 이미 화면위에 얹혀져 있기 때문에 프로그램은 이미 얹혀져 있고 보이지만 않는 것을 다시 얹을 필요가 없으므로, 그상태 그래도 놔두게 됩니다. 즉, 우리 눈에는 보이지 않아도 컴퓨터는 위에 얹혀져 있다는 것을 알기 때문에 동작하지 않는 것입니다.

이해 가시나요?

여튼, 상황과 때에 따라서 이렇게 뷰를 얹고 없애고 보이게 하고 안보이게 하고... 이런식으로 컨트롤 할 수 있다는 것을 간략히 보여드렸습니다~!

다음 번에는... 또 뭘 해볼까요?ㅋㅋ

아직 할것은 태산인데 말이죠 ㅎㅎㅎ

댓글 남겨주세요~!

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 현준이빵 2012.10.14 01:03  댓글주소  수정/삭제  댓글쓰기

    즉, 원래 있던 View와 새로 띄운 View와 상호작용이 안돼나요?;

    죄송합니다 뎃글 한번에 안달아서; 집컴퓨터가 이상해서 확인이 안눌지네요;

  3. asrada 2012.10.27 01:51  댓글주소  수정/삭제  댓글쓰기

    정말좋은강좌...!!

    시간가는줄 모르겠네요ㅎㅎ

    정말 또 잘보고 갑니다!!

  4. Karl 2012.11.07 16:06  댓글주소  수정/삭제  댓글쓰기

    바쁘신 와중에 죄송하지만 질문 하나 드려도 될까요..?
    야곰님 강좌를 처음부터 쭈욱 보면서 따라하고 있는데요
    야곰님이 강좌에서 쓰시는 Xcode 버전이 4.2맞죠~?
    제가 snow leopard로 개발을 진행하고 있는데 사정상(앱스토어 연결이 안되요 ㅠㅠㅠㅠㅠㅠㅠㅠ)
    Xcode를 4.0을 쓰고 있습니다...

    처음부터 강좌를 따라하다보니 강좌와 다른 부분이 꽤 많이 있더라구요..
    그래서 어느 정도 고쳐가면서 제작중인데 이번 강좌는 실행이 잘 안되네요... ㅜㅜ
    Remove를 누르고 다시 Add를 누르면 초록색 바탕에

    Thread 1: Program received signal: "EXC_BAD_ACCESS"

    가 출력되고 멈춰버리네요 ㅠㅠㅠ
    저건 무슨 에러인가요...? ㅜㅜ 찾아봐도 잘 안나와서
    죄송하지만 이렇게 여쭤봅니다 ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.08 07:39 신고  댓글주소  수정/삭제

      안녕하세요 Karl님~!
      방문해 주셔서 고맙습니다 :)
      말씀하신 내용은 Xcode 버전과는 별개의 문제 같아요^^
      여튼 해결방안을 생각해 보자면... 제 생각에는 버튼에 메소드가 중첩 연결이 되어있거나 잘못 연결이 되어있을 것 같습니다.
      xib에서 버튼을 오른쪽버튼 클릭하여 메소드가 정상적으로 연결되어 있는지 한 번 꼼꼼히 살펴보시기 바랍니다.
      그게 아니라면 코드상에 무엇인가가 잘못되어 있겠죠^^;

  5. hyung 2012.11.15 16:41  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요! 야곰님이 게시해주신 화면전환게시물 4개를 다 읽고 해봐도 안되는게 있어요 ㅠㅠ
    죄송하지만 혹시 시간되실때 한번 읽어주세요 ㅠㅠ
    음 조금 설명을 드리자면..
    A라는 뷰에 카메라(B라고 말할게요)로 갈 수 있는 버튼이 있어요.
    그 버튼을 눌러서 B로 왔어요
    B는 그냥 카메라가 아닌, 저번에 야곰님이 가르쳐주셔서 만든 커스텀 카메라가 있어요
    거기에 옵션뷰로 이동하는 "버튼"이 있는데 이녀석이 도통 말을 듣지 않네요
    웃긴건요 다른뷰에서 그 함수를 쓰면 잘 알아 듣는데 꼭 카메라에서 쓰면 아무 반응이 없네요
    제 생각에는 처음에 [self.view addSubview.onView]에서 맨 앞에 view가 A뷰라서 안되는거 같은데
    카메라 고유 view포인트라던가 있나요 ㅠㅠ.. 정말 오늘 7시에 출근해서 지금까지 못해가지궁..
    진짜 어떻게든 해보려했는데 너무너무 힘드네요 ㅠㅠ

    쉽게 정리 하자면 A->옵션뷰 로는 가지는데 B->옵션뷰 는 아무 반응이 없어요! 제 생각은 처음에 뷰를 못잡아서 그런거 같은데
    야곰님 의견을 들려주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.15 17:36 신고  댓글주소  수정/삭제

      :) 안녕하세요 hyung님~
      [self.view addSubview] 가 아니라

      B가 뷰컨트롤러라면 [B.view addSubview:]
      를 사용하시면 되고,
      B가 뷰라면 [B addSubview:]
      하시면 될 것 같습니다 ^^

    • hyung 2012.11.15 17:40  댓글주소  수정/삭제

      네 한번 해볼게요! 항상 친절한 답변 감사드립니다 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.15 17:46 신고  댓글주소  수정/삭제

      별말씀을요:-) 항상 찾아주셔서 고맙습니다 ㅎ

    • hyung 2012.11.16 11:32  댓글주소  수정/삭제

      안녕하세요! 어제 끙끙거리던게 풀렸어요^^
      카메라가 뷰컨트롤러가 안잡혀서 계속 A뷰에 옵션화면이 뜨고 있던 거였어요 ㅠㅠ
      결국 [self dismissModalViewController]로 그냥 그 화면을 지우고 A뷰에 띄우니 되더라구요.. 흑흑 카메라녀석 뷰 이름을 몰라서..

      근데 또 다른문제가 생겨버렸어요..
      옵션뷰에서 카메라로 돌아가려고 하는데, 카메라뷰를 지우고 띄운거기 때문에, 다시 카메라를 실행시켜야 되는데
      함수를 불러도 반응이 없네요.. ㄷㄷ
      다른 Alert같은 함수들은 되는데 이녀석은 무반응..

      -(IBAction)Camera{
      UIPIckerController*********어쩌고저쩌고
      }
      이녀석이 카메라 함수인데 아무리 불러도 반응이 ㅠㅠ

      그냥 카메라 함수 전체를 복사해서 옵션뒤로가거버튼에 그 함수를 넣자니 그건 좀 아닌것 같구요 ㅠㅠ.. 왜 안되는 걸까요

      아.. 참고로 카메라 함수가 있는 파일과 옵션뷰가 있는 파일이 서로 다릅니다. #import해서 불러오려는데.. 흑흑
      [self.cameraModule Camera];이렇게 했는데 안되구요
      [self.cameraModule Alert];이런 메세지띄우는 함수는 되는데.. 뭐가 다른거죠 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.16 15:16 신고  댓글주소  수정/삭제

      흐음... 무슨말씀이신지 잘 감이 안와요 ㅠ_ㅠ
      말로만 들으니 잘 모르겠네요 ㅠㅠㅠ
      에고... 고생이 많으실텐데

    • hyung 2012.11.16 15:42  댓글주소  수정/삭제

      음.. 간단히 말씀드리면요
      OptionView라는 파일에서
      CameraModule파일에 있는 함수를 가져다 쓰려고 하는데

      A(Alert)라는 함수는 불러지는데
      B(Camera)라는 함수는 안불러져요
      둘다 제가 만든 녀석들이구요..
      두 함수 다 CameraModule이라는 파일에 있구요
      OptionView에서 버튼을 누르면
      CameraModule에 있는 카메라 함수를 실행시키려고 했거든요..
      그게 안되네요 ㅠㅠ 근데 웃긴게 Alert함수는 되더라구요.. ㅠㅠ
      진짜 점점 카메라가 싫어지고 있....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.16 17:36 신고  댓글주소  수정/삭제

      일단 그 메소드 내부에 로그를 찍어서 메소드가 호출이 되는지 확인을 해보는 것이 우선일 것 같구요, 버튼과 확실히 잘 연결이 되어있는지 확인해 보시구요, 그래도 아니라면 카메라를 어떤식으로 불러들이는지 확인을 해봐야 할 것 같습니다 ^^;

    • hyung 2012.11.19 09:17  댓글주소  수정/삭제

      허헛.. 다시 주일의 시작이네요! 야곰님 조언받아 다시 해볼게요^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:25 신고  댓글주소  수정/삭제

      :) 넵 또 새로운 시작이네요~!
      행복한 한 주 되시길 빕니다 ㅎ

  6. hyung 2012.11.19 10:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 요새 야곰님을 매우 귀찮게 하고 있는 형 입니다..
    CameraModule파일에
    -(void)Camera{
    -카메라 실행 소스
    }
    라는 메소드가 있을때

    같은 CameraModule파일에서
    -(IBAction)button{
    [self Camera];
    }
    라고 하면은 실행이 되잖아요?

    그렇다면! OptionView.h라는 파일에서
    #import CameraModule.h
    해서 Camera메소드를 사용해고 싶을때는 어떤식으로 써야 하나요
    [self Camera]라고 하면 오류나와요 ㅠㅠ.. 기본개념이 없어서 죄송합니다..
    어떤 식으로 불러들여야 할지 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.19 10:56 신고  댓글주소  수정/삭제

      안녕하세요 hyung님~
      언제든 저를 괴롭히셔도 상관은 없습니다 ^^;
      self라는 녀석은 자기 자신(객체)를 지칭하는 역할을 하므로 당연히 다른객체에 있는 메소드를 가져다 쓰려고하면 에러가 나겠죠^^
      일단 제 Objective-C 포스팅을 쭉 한번 보면서 기본 문법에 대한 정리를 해 보시고, 클래스 메소드로 만들어 보시면 더 편하게 사용하실 수 있을 것 같습니다.

      아무리 질문을 많이 하고 검색을 많이 해서 당장 해결 할 수 있고 잔기술을 써볼 순 있지만, 기초가 없으면 빠른 시일내로 무너지게 되어있습니다.

      지금 당장은 오래 걸리는 것 같아도 기초부터 차근차근히 다시 배우고 정리하는 것이 가장 빠른 지름길일 것이라고 생각합니다 ^^*

      처음부터 차근차근 기초를 되짚어 보셔요 :)

  7. hyung 2012.12.04 17:12  댓글주소  수정/삭제  댓글쓰기

    야곰님 포스팅엔 정말 중요한게 많아요^^~

    addsub뷰 지우는거 찾다가 검색해보니 역시나 있네요!

    또한번 도움받고 갑니다^^~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.12.04 19:45 신고  댓글주소  수정/삭제

      중요하다기 보다는 기초적인 것이겠죠...ㅎ
      물론 기초가 가장 중요하긴 하지만...
      내가 뭔 말을 하고 있는건지 +_+ㅋㅋㅋ

  8. Favicon of http://deoker.com BlogIcon Deoker 2013.01.02 17:03  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 너무 감사 드립니다 :D

  9. Lewis6 2013.01.03 11:19  댓글주소  수정/삭제  댓글쓰기

    저는 처음에 First View 바깥 쪽에 뷰를 놓고 나서 추가한 뷰의 사이즈 조정이 안되어서 몇시간을 낭비했네요. ㅠㅠ
    처음에 속성탭에서 Simulated Metrics Size 가 Retina 4 Full Screen 로 되어 있는데 그것을 Freeform 으로 변경해서 사이즈 수정을 할 수 있었습니다.
    Xcode 4.5, iOS 6.0 기준입니다 ;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.03 20:01 신고  댓글주소  수정/삭제

      안녕하세요 Lewis6님!
      찾아주셔서 정말 고맙습니다 ㅎ
      Xcode가 버전이 변경되면서 좀 바뀐 부분들이 있죠^^;
      부가적인 설명 남겨주셔서 정말 고맙습니다!
      새해 복 많이 받으셔요 ㅎ

    • 난나야 2013.12.19 10:55  댓글주소  수정/삭제

      와 감사합니다^^

      덕분에 사이즈 조절 할 수 있었습니다. ㅎㅎ

    • NanMin 2014.03.23 13:23  댓글주소  수정/삭제

      저두 1시간째 보다 혹시나 해서 댓글보니 역시 저같은분이 계셨네요..감사합니다….ㅎㅎ

  10. hyun 2013.02.10 23:02  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 감사드립니다~!
    저도 윗분처럼 추가한 뷰의 사이즈 조정이 안되어서 몇 시간 허비했네요..ㅠㅠ
    버전마다 바뀌는 게 많아서 따라하기도 어렵네요..ㅠ

  11. 딴또 2013.03.08 18:52  댓글주소  수정/삭제  댓글쓰기

    이번 강의도 감사합니다.

  12. 퐝칭칭 2013.03.28 14:33  댓글주소  수정/삭제  댓글쓰기

    아 정말 답답한게 다사라지는 곳입니다 여긴 ...... ~,,~
    혼자 공부하면서 얼마나 생고생을 했는데
    정말 감사드립니다 야곰 님 앞으로도 1강부터 지금까지 쭉따라왔는데 너무 좋아요~
    사랑합니다 ㅋㅋㅋㅋ

  13. dklee7206 2013.04.29 21:55  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 강좌 잘 보고 있는 초보입니다.

    강좌중에 File's Owner에서 검정색 뷰로 땡겨서 onView가 동그라미 생기게 하라고 하셨는데, 안해도 실행은 되는데
    어떤 차이가 있는지 궁금해서요, 안바쁘실때 답변 부탁드립니다.

    dklee7206@naver.com

  14. nari 2013.05.14 16:24  댓글주소  수정/삭제  댓글쓰기

    정주행 하면서 하나씩 다 따라해보고 있는데
    점점 재밌네요^^ 감사합니다~

  15. yimcold@gmail,com 2013.07.23 08:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 이 블로그를 한줄기 빛 처럼 여기며 살아가는 iOS에 매우 초보자입니다.
    덕분에 많은 내용 얻어가고 있습니다.

    두가지 질문드릴게 있는데요

    1.여기에서 thirdViewController파일은 이용하지 않는 것 처럼 보이는데 왜 추가하신 건가요?

    2. 저는 thirdviewController에서 구현한 뷰를 부분뷰 처럼 집어넣고 싶은데 그게 가능 할까요?
    그러니까 현재는 B.xib에서 버튼이 들어있는 부분뷰를 구현해서 히든/쇼/하고 있잖아요~ 그렇다면 A.xib파일에서 구현한 뷰를 B.xib에서 부분뷰로 사용하는게 가능한가요?

    우문이지만 현답해 주실것으로 믿습니다 ^.^
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.23 09:36 신고  댓글주소  수정/삭제

      ㅎㅎ 안녕하세요~!

      1. 매의 눈을 가지셨군요!! 글쎄요... 제가 왜 안썼을까요 'ㅁ'
      아마 제가 뭔가 해보려다가 안하고 이거만 포스팅 했었나봐요 ㅎㅎㅎ 신경쓰지 않으셔도...ㅎㅎ

      2. 당연히 가능합니다 :) iOS 6 이상이라면 Container View Controller를 활용할 수 있구요, 그 이하 버전이라도 다른 방법으로 가능합니다 ㅎ

      컨테이너 뷰 컨트롤러 예제는 애플 문서에 잘 나와있습니다 :) 참고해 보세요 ㅎ

      http://bit.ly/Vksa9N

      그 이하 버전에서 사용할 수 있는 방법은
      살짝 다른 개념이지만 이 부분을 참고해 보세요.
      http://www.ralfebert.de/tutorials/iosdev/viewcontroller/
      위 예제에서 네비게이션 컨트롤러 대신 지금 사용하고 있는 뷰 컨트롤러 위에 예제와같이 뷰 컨트롤러를 올리고 클래스(ThirdViewController)를 지정해 주면 됩니다 :)

  16. yimcold@gmail,com 2013.07.23 19:51  댓글주소  수정/삭제  댓글쓰기

    와!!!!!!!
    주신 아이디어로 여러문제 해결했습니다!!!
    자주 들를게요. 야곱님 감사합니당!!!!!

  17. Hide 2013.11.10 15:30  댓글주소  수정/삭제  댓글쓰기

    감사합니다

  18. tmsnvl 2014.10.10 10:16  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~!!
    좋은 강좌 잘 봤습니다.
    강좌를 보고 질문이 있는데요~
    지금 현재는
    [self.view addSubview:onView];
    [onView setFrame:CGRectMake(20.0f, 300.0f, 280.0f, 100.0f)];
    으로 좌표를 조정해서 밑에 버튼을 가려놓으셨는데 가려져 있지 않다고 했을때
    밑에 부모뷰의 클릭 이벤트는 어떻게해서 막을수 있나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.10.10 10:22 신고  댓글주소  수정/삭제

      안녕하세요~
      뷰에 보면 userInteractiveEnable (?) 이라는 프로퍼티가 있을거예요.
      NO로 설정해주시면 이벤트를 받지 않습니다 :)

  19. tmsnvl 2014.10.10 17:32  댓글주소  수정/삭제  댓글쓰기

    앗~!! 빠른 답변 감사드립니다~ㅎㅎ
    제가 질문을 잘못했나봅니다.
    addSubview 로 팝업을 띄우면 팝업 외의 다른 버튼이나 이벤트
    즉 부모뷰의 Add 버튼이나 Show 버튼은 이벤트가 안먹히게 하고 싶습니다.
    팝업 뷰의 Remove, Hide 버튼 이벤트는 되구요
    물론 팝업 뷰가 사라지면 다시 버튼 이벤트가 정상 동작하게 하고 싶구요~

    아직 많이 부족해서 야곰님이 힌트 주신걸로 이렇게 해보니
    [self.view addSubview:onView];
    [self.view setUserInteractionEnabled:NO];

    팝업뷰도 이벤트가 안먹히네요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.10.10 18:29 신고  댓글주소  수정/삭제

      음... 버튼들도 기본적으로 UIView의 확장이기 때문에 같은 프로퍼티를 줄 수 있습니다. 버튼들을 IBOutlet으로 연결하고 각자 버튼들을 컨트롤 해줄 수도 있는데, 잘 이해가 가지 않으시면.. 차후 IBOutlet을 연결하는 방법을 터득하신 후 다시 보시면 이해가 되지 않을까 싶습니다 ^^

  20. VSblue 2015.08.25 10:27  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 좋은강좌 잘 보고 있습니다.
    질문이 있는데요

    스토리보드에 view를 드래그래서 띄울려고하는데 자꾸 view가 드래그가 안되네요...어찌해야되죠...

    • Favicon of https://blog.yagom.net BlogIcon yagom 2015.08.25 12:21 신고  댓글주소  수정/삭제

      안녕하세요 :)
      스토리보드에서 View 대신 View Controller를 올려주세요~ 스토리보드에는 뷰 대신 컨트롤러들을 올릴 수 있습니다 :)

  21. 넘나다른것 2016.09.27 13:41  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 강좌 너무 잘보고 있습니다! 앞에것은 어찌어찌 따라했는데.. navigation controller부터 따라하기가 힘드네요 ㅜㅜ

    이번편은
    view를 만들어서 File's owner에서 드래그했는데 onView가 안떠요...ㅠㅠ

    그 전에는 스토리보드에서 view controller로 만들었었는데 그것도 안되서 다시 해본 거거든요 ㅠㅠ
    xcode가 너무 바뀌어서 따라하기 정말 힘드네요 ㅠㅠ 도와주세요 ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2016.10.01 18:29 신고  댓글주소  수정/삭제

      안녕하세요 넘나다른것님!

      iOS 버전이 많이 바뀌어서 해당 내용들은 많이 사라지거나 바뀌었고, Xcode 또한 변화가 많았습니다. 초보자의 입장에서 요즘 이 튜토리얼을 제대로 따라하기에는 무리가 있습니다 ㅠ_ㅠ 최신의 좋은 예제들을 따라해 보심이 어떨까 합니다.

      많은 도움을 드리지 못해 죄송합니다.


오늘의 주제

1. 주석 ( Comment, 코멘트 )


열 네번째 시간입니다.^^

정말 오랜만에 뵙겠습니다...
알고 계시다 시피 저의 맥북 에어가 구입한지 일년도 되지 않았는데...
누군가 슬쩍 해 갔습니다...ㅠㅠ
어흑...
일단 핑계지만...
어흑..ㅠㅠ
여튼... 다시 차근차근 포스팅 해 보려 합니다.

탭 뷰 컨트롤러, 네비게이션 컨트롤러 등을 쭈욱 살펴 왔었는데...
잠시 딴얘기 한 번 해보려 합니다.
저도 좀 더 빨리빨리 이것저것 써보고 싶지만, 
중요하다고 생각하는 만큼 빼놓고 갈 수가 없네요..^^

사실 Objective C와 C 포스팅 중간에 다 들어가 있습니다.
그런데 여기 또 다시 캡쳐하기도 거시기 해서 Objective-C 포스팅에서 퍼왔습니다.
기본적인 내용은 동일 하므로, 제가 저기에 적어 넣은 코드들은
어플리케이션의 AppDelegate.m 파일의
application:didFinishLaunchingWithOptions: 메소드 안에 작성하시면 됩니다.

자, 다시 출발!!


# 주석

주석이 무엇인가 궁금하시죠?ㅎ
다른 블로그나 책에서 한 챕터를 잡고 주석을 설명하는 경우는 거의 없습니다만..
주석은 생각 외로 굉장히 중요한 역할을 하며, 프로그래밍의 첫 습관을 들일때 매우 중요한 녀석이라고 생각합니다. 물론 실무에서도 굉장히 중요합니다.
그래서 주석은 한 챕터로 잡고 설명하려 합니다!!
오늘 포스팅은 짧습니다만, 꼭 기억해 두셔야 할 포스팅입니다^^*

주석.. 코멘트.. 같은 말입니다!
주석은 코드에 아무런 영향을 미치지 않지만, 이 코드가 어떤 코드인지, 무슨 역할을 하는 것인지에 대한 설명을 적어놓는 메모 같은 것입니다.

그런데 이게 왜 중요하냐구요?
정말 간단한 프로그램이라면 굳이 필요 없을지도 모르지만, 나중에 백줄, 천줄, 만줄 ... 길어지는 프로그램이라면 내가 짜 놓고도 이 부분이 어떤 부분이었는지 기억하지 못하는 경우가 허다합니다 ㅋㅋㅋ
나는 기억력이 좋아서 아닐거라구요?
훗...!절대 그렇지 않습니다!
십수년 프로그래밍 한 고수분들도 꼭 적어두는 것이 주석입니다.
정말 코드 짜기도 바빠 죽겠는데 그런거 적을 시간이 어디있냐구요?
그래도 해야 합니다!!
나중에 현업에 가서 협업을 할때에도 굉장히 중요합니다.
내가 짜놓은 코드는 내가 해석하기 쉬울지 몰라도 다른 사람이 같이 일하면서 내 코드를 볼 때, 이해가 가지 않으면 일이 그만큼 늦어지고 심지어는 프로젝트가 망가지기도 하니까요.
제가 여기서 중요하다고 백만번 말해도 모자랄 만큼, 주석을 다는 것은 정말 중요한 습관입니다.
처음부터 주석을 다는 습관을 들여 놓으셔야지 나중에 후회하지 않고, 힘도 덜 드실것을 저는 장담합니다!!

이렇게 말하니까 주석 다는 것이 정말 어려운 것 같지만, 사실은 정말 간단합니다!
한 번 보시죠 ㅎㅎ

자... 화면에 보이는 저 녹색 글씨들 보이시죠? 저것들이 모두 주석입니다.
프로그램을 실행시켰을 때는 전혀 티가 나지 않지만, 작업하는 프로그래머는 보게 되는 저것이 주석입니다.
컴파일 할때 컴파일러가 주석은 모두 제외하고 컴파일 하게 됩니다.


 




위의 코드 실행 결과 화면입니다.
녹색으로 주석처리된 녀석들은 화면에 나오지 않죠???
코드 해석이 어려우시면 지난번 포스팅을 다시 한 번 보고 오세요^^



자... 조금 수정해서 보여드릴게요~!
어떻게 뭐가 달라졌는지 비교해 가면서 보세요^^


결과 화면입니다~!



로그에 찍힌겁 보시면 깨알같은 팁도 있죠?ㅎㅎㅎ
여기에 직접 쓰지 않을테니 한 번 사용해 보세요^^ 


중요한 주석 처리하는 방법은 간단합니다!


// 주석......
이런식으로 주석을 작성하게 되면 한 줄이 주석처리 됩니다.
즉, 한 줄을 자신이 쓰고 싶은 말들을 써놓을 수 있죠.


또한, 
/* 주석...
여러줄
쓸 수 있는
주석... */ 


이런식으로 처리를 하게 되면 여러줄을 주석처리 할 수 있습니다.

참 쉽죠잉!?

위에 예시로 작성한 코드에서는 주석을 위나 아래에 달아놓았는데, 코드 바로 옆에 붙여 써도 무방합니다~
무슨말인지 잘 이해가 안가시면 직접 해보세요 ㅎㅎ
다시 한 번 말씀드리지만, 컴퓨터 안고장납니다잉 ㅋㅋ 폭발 안합니다잉 ㅋㅋㅋ
주석 다는 스타일을 같이 협업하는 사람끼리 정하거나, 자신만의 스타일로 작성해도 됩니다. 딱히 정해진 틀은 없어요^^ 

앞으로 제가 포스팅을 할 때 마다 주석을 일일히 달며 하지는 못할 거예요.
하지만, 여러분은 제 포스팅을 보며 공부 하실때마다 코드에 꼭 주석을 달아주세요!!
부탁드립니다~!
이것은 정말 중요한 습관임을 다시 말씀드립니다!
그래서 일부러 한 챕터를 내서 포스팅을 한거예요~

그럼 긴 잔소리는 여기까지만 하고 다음 번에 뵙도록 해요^^*

뿅!


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 늙은독자 2012.01.31 18:43  댓글주소  수정/삭제  댓글쓰기

    맥북에어 ...

    가슴이 아프네요....T_T

  2. Favicon of http://www.theuniuni.com/ BlogIcon cheap bras 2012.06.25 12:38  댓글주소  수정/삭제  댓글쓰기

    Amazing write-up! This could aid plenty of people find out more about this particular issue. Are you keen to integrate video clips coupled with these? It would absolutely help out. Your conclusion was spot on and thanks to you; I probably won’t have to describe everything to my pals. I can simply direct them here

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.25 15:54 신고  댓글주소  수정/삭제

      I don't know how to make a video clip for these...
      If you can, let me know about it.
      But I cannot understand ur words.
      Is this post has a conclusion?
      Do u understand what the post means?
      If you can direct ur friends, I can write it in Eng either.

      p.s.
      If my question were rude to you, forgive me buddy.
      It's just lack of my expression skill.

  3. 컴맹 2012.06.28 17:38  댓글주소  수정/삭제  댓글쓰기

    헐..맥북에어..ㅠㅠ
    어쩌다가...ㅠㅠ

    암튼 강의 잘보고 갑니다.~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.29 09:43 신고  댓글주소  수정/삭제

      안녕하세요 컴맹님 :-)
      그 맥북에어 생각하면 아직도 가슴이 아려옵니다...ㅎㅎ
      찾아주셔서 고맙습니다 ^^*
      자주자주 놀러오세요 ㅎ

  4. neoaero 2012.07.26 12:46  댓글주소  수정/삭제  댓글쓰기

    주석을 그리 중요하게 생각하지 않았는데 명심하겠습니다...^^

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 17:52 신고  댓글주소  수정/삭제

      ㅎㅎ 넵~!
      주석이 중요하죠...ㅎㅎㅎㅎㅎㅎㅎ
      사실 저도 업무중에 바쁘다보면 안쓰고 지나가 버리는 경우가 많은데 다음에 볼 때마다 후회하죠 ㅠㅠ

  5. chosamong 2012.08.24 17:44  댓글주소  수정/삭제  댓글쓰기

    흑 맘 아픈 맥북 에어...
    또 생각나게 해 드리네요. ㅠ.ㅠ;

    주석 달기 정말 정말 어려버요.
    그래도 배웠으니 이제부터라도...

    감사 인사 꾸우벅 <(__)>

  6. 2013.02.23 17:03  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  7. 딴또 2013.03.07 16:35  댓글주소  수정/삭제  댓글쓰기

    강의 감사합니다.

아이콘에 발광 효과를 넣지 않았는데 아이콘의 글로시 효과는 자동으로 나와요~
없애고 싶으신 분들을 위하여 방법을 알려드립니다~
어플리케이션의 plist파일로 들어와서 공백에 대고 마우스 오른쪽 클릭!
또는 컨트롤+클릭 하시면 메뉴가 나오는데요
Add Row를 클릭합니다~


그러면 새로 한 줄이 나오는데요, Key라는 열의 내용을 Icon already includes gloss effects라고 입력하여 하시고 (아마 자동완성으로 나올거예요) Value는 YES를 써주시구요~(대소문자 구별합니다)


다시 실행하여 봅니다~
엄허~! 뽀송뽀송 글로시 효과가 사라졌어용 ㅋㅋㅋ


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 
Posted by yagom

댓글을 달아 주세요


오늘의 주제

1. 네비게이션 아이템 커스터마이징   


열 세번째 시간입니다.^^

지난 번에는 네비게이션 컨트롤러 사용방법을 알아보았습니다.
조금 이해는 되시나요?
잘 이해는 안되시더라도, 조금씩 조금씩 따라오다 보면 언제쯤엔가 약간 감이 잡히실 거예요 ㅎㅎㅎ
사실 원론적인 이야기들을 쫘악 펼쳐놓고 첨부터 이게 뭐다 저게 뭐다 하기 보다는 이게 더 나을것 같아서요.
깊게 들어가면 잘 못따라 올지도 몰라요..ㅎㅎ
흥미도 훅 떨어지구요 ㅎㅎㅎ
궁금한 사항들이 있으면 댓글 남겨주시면 최대한 상세하게 알려드리도록 하겠습니다 ㅎ

자 그럼 오늘은 네비게이션 아이템들을 약간 커스터마이징 해보죠^^
스따뚜~~~~~~~~~~~~


# 네비게이션 아이템이란?


네비게이션 아이템이란 개발문서에서 살펴보면 

The UINavigationItem class encapsulates information about a navigation item pushed on a UINavigationBar object’s stack. A navigation bar is a control used to navigate hierarchical content. A UINavigationItem specifies what is displayed on the navigation bar when it is the top item and also how it is represented when it is the back item.

이라고 나오는데요 ㅋㅋㅋ

뭐, 대충 훑어 보면 네비게이션바 객체의 스택에 쌓인 네비게이션 아이템에 대한 정보?? 아... 발해석 죄송합니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 대충 감은 오는데 한국말로 어떻게 이쁘게 바꾸는지를 모르겠네요 ㅋㅋㅋ 

여튼 네비게이션바에 있는 구성요소들을 이야기 하는거예요 ㅎㅎㅎ

# 네비게이션 아이템 커스터마이징

한 번 바꿔 봅시다요~

일단 FirstViewController.m 으로 이동!
빨간 네모를 따라 작성해 봅시다 ㅎ

initWithNibName 메소드는 초기화 메소드라고 말씀드렸죠?
self.navigationItem.title = @"The First View";
라고 쓴 것은
self 즉 자신(FirstViewController 인스턴스)의 navigationItem중에 title을 The First View로 바꾸겠다는 말이 되겠습니다 ㅎㅎ
즉, 이 객체 인스턴스를 초기화 할 때 네비게이션아이템 타이틀을 설정한다는 말이 되겠습니다.


자, 마찬가지로 SecondViewController도 설정해 봅시다 ㅎ


이제 AppDelegate로 와서~!
[[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];
라고 입력해 봅시다.
이 코드는 이 어플리케이션의 모든 UIBarButtonItem의 모습 중에 틴트컬러를 검은색으로 바꿔주겠다는 말입니다.
즉, 네비게이션바의 버튼이든 툴바에 있는 버튼이든 간에 바 버튼들의 색상을 검정으로 바꾸겠다 이말입니다.
다른 녀석들에도 응용이 가능하구요^^
물론 원하는 곳에서 개별적으로도 변화시켜 줄 수 있습니다. 그건 저쪼아래 해볼거예요 ㅎㅎ
또 아래 코드는 우리가 만들어준 네비게이션의 바 색상을 변경해 주는 코드입니다. 이녀석도 검정을 해 봅니다 :-)
잘 모르시겠죠?ㅋㅋㅋ 실행해 보시면 감이 오실거예요~


실행 결과 화면입니다 ㅎㅎ

어..? 상단 바의 색상이 검정으로 바뀌었어요 ㅎㅎㅎ 그리고 타이틀도 The First View로 변경이 되었네요!!


SecondViewController도 마찬가지네요^^


그런데 왠지 저기 위에 뒤로가기 버튼의 이름이 너무 길어서 보기 싫어요...ㅋㅋㅋ 저 뒤로가기 버튼은 기본적으로 전 화면의 뷰컨트롤러의 네비게이션 아이템의 타이틀로 세팅이 됩니다. 그런데 우리가 이름을 좀 바꿔줘 봅시다 ㅎㅎ

아래 네모 박스의 코드를 FirstViewController.m에 입력해 줍니다.
분명히 이 버튼은 SecondViewController에서 보여지는데 왜 여기서 입력해 주냐구요?
그냥... 그 버튼은 이 FirstViewController를 가리키는 녀석이니까 여기서 설정해 주는것도 이상하지는 않죠?ㅎ
SecondViewController에 집어 넣으면 그 다음 화면에서 보입니다...^^
여기서 alloc이 뭐고 release가 뭐고... 궁금하시죠?ㅎ 좀 나중에 알아보도록 해요~


실행 결과입니다 ㅎㅎㅎ 버튼이 내가 원하는 이름으로 변경되었네요^^


자, 그런데 우리가 아까 위에서 이 어플리케이션의 바 버튼 아이템들의 색상을 모두 검정으로 바꾸어 주었었죠? 그래서 위의 버튼들도 검은색으로 나오구요 ㅎㅎㅎ
근데 왠지 이녀석 만큼은 파란색으로 바꿔주고 싶어요 ㅎㅎㅎ
바꿔줘 봅시다.


짜잔~ 파란색으로 바뀌었네요 ㅎㅎㅎ
좀 더 이쁜 색으로 바꿔 줄 수 있는 방법은 나중에 얘기해 보도록 해요.ㅎ
아니면 개발문서에서 UIColor에 대해서 알아보셔도 좋을 것 같아요^^


자.. 이렇게 또 하나 해 보았네요~

그런데 코드를 보면서 의아해 하시는 부분이 생길 수 있어요

어떤 속성값(property)에는 self.navigationItem.title = @"title" 처럼 점으로 구분해서 들어가구요.

어떤 속성값은 [[self navigationItem] setTitle :@"title"]; 식으로 설정하기도 하니깐요...ㅎㅎ

그러나 결론은 !! 같다! 입니다^^

원래 Objective-C에서의 정석은 두 번째 방법처럼 [ ]를 사용하여 getter, setter 메소드를 이용하는 것이 정석이지만, C++등 다른 프로그래밍 언어의 프로그래밍에 익숙해 있는 개발자들은 .을 사용하여 코딩하는데에 훨씬 익숙하거든요^^ 그래서 이렇게도 쓰고 저렇게도 쓰는 것입니다.

둘 중 뭐가 더 편하다 불편하다는 자기 판단이고 자기 몫입니다.^^

후우... 대충 감이 오시나요? getter, setter등의 얘기는 좀 더 깊숙한 얘기니까 나중에 차근차근 알아보도록 해요^^

그럼 오늘은 여기까지~! 다음에 또 보아요 ㅎㅎ




by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 늙은독자 2011.12.10 16:13  댓글주소  수정/삭제  댓글쓰기

    가끔 와서 봅니다.

    워낙 말재주가 좋으셔서, 내용이 너무나 쉽게 이해되네요.
    쭈~욱 계속해 주시길....^^;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2011.12.12 20:55 신고  댓글주소  수정/삭제

      격려의 댓글 고맙습니다~!

      처음으로 격려의 댓글을 남겨주셨네요ㅠㅠ 감격 입니다~!

      자주 오셔서 댓글 남겨주세요^^ 필요한 것 있으시면 말씀해 주시구요~!

  2. 어쩌다마주친그대 2012.01.27 01:02  댓글주소  수정/삭제  댓글쓰기

    ㅎㅎ 우연히 들어오게되었는데요 아주 재미있게~ 시간 가는줄 모르고 읽게되네요
    게속 좋은 강좌 부탁드립니다 ~~

  3. Adnroid Developer 2012.02.22 03:03  댓글주소  수정/삭제  댓글쓰기

    저도요 ㅋㅋㅋ 우연히 들어오게 되었는데 너무 잘 설명해주셔서 계속 보고 있어요! 아이폰 개발 정말 생소했는데 이 글 보면서 기초부터 다지고 있어요 ㅋㅋㅋㅋ 전 안드로이드 개발자거든요 ㅋ 감사합니당 앞으로도 쭉~~~ 좋은 설명 잘해주세요. 계속와서 공부하고싶어요~

  4. 인절미후후 2012.04.23 20:48  댓글주소  수정/삭제  댓글쓰기

    공부를 하면 할수록 야곰님의 글이 더욱 이해가 되면서 얼마나 좋은글인지 알게 되는군요!!
    덕분에 아무것도 모르던 제가 몇주사이에 네비게이션 컨트롤러에 테이블뷰 띄우고
    그안에 xml파싱해서 데이터집어 넣고 파일다운로드 관리 하는 기능을 아주아주 약간이나마 구현하게 되었습니다.
    무한 감사를 드리고 앞으로도 잘 부탁드리겠습니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.23 20:55 신고  댓글주소  수정/삭제

      도움이 되신다니 다행입니다^^*
      자주 들러서 글도 남겨주세요 ㅎ
      제가 틀린부분이나 부족한 부분 있으면 지적 부탁드려요~^^

  5. 2012.04.24 16:31  댓글주소  수정/삭제  댓글쓰기

    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];

    이부분에서 xcode 4.3.1 에서는 틴트 색상만 변하네요..

    위 캡쳐부분중에 //어플리케이션 내의 모든 BarButtinItem의 틴트 색상이 검은색이 됨

    이 부분입니다.

    iphone 5.1 Simulator 로 테스트 해봤습니다.~~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.24 18:09 신고  댓글주소  수정/삭제

      ^^;;
      무슨말씀이신지 잘 모르겠어요ㅠㅠ
      틴트 색상을 변경하는 메소드인데...
      틴트 색상이 바뀌는게 맞습니다..^^;
      App내의 모든 UIBarButtonItem 의 틴트색상을 검은색으로 변경하여 준 것입니다...
      제가 지적사항을 잘못 이해한건가요..? ^^;

  6. Newbie 2012.05.15 16:59  댓글주소  수정/삭제  댓글쓰기


    저도 ㅠㅠ 저 바버튼 부분이요 ㅠㅠ...

    저렇게 입력했더니

    Bar 자체 색깔은 안변하고, 뒤로가기 버튼만 검은색으로 변하네요 ㅠ

    Bar 전체 색깔을 바꾸는 방법은 어떻게 해야하나요? T_T?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.15 17:27 신고  댓글주소  수정/삭제

      세 번째 그림에 AppDelegate.m 에서...
      제가 빨간 네모를 해놓지를 않았네요^^;
      코드에 보면 firstViewNavi.navigationBar.tintColor = [UIColor blackColor];
      라고 작성해 놓은 부분이 있을거예요~
      그 부분을 놓치신 것 같습니다..^^
      빨간 네모칸을 놓친 것 죄송합니다~
      빨간 네모가 없어도 소스코드를 찬찬히 한 번 봐주세요^^;

  7. Newbie 2012.05.16 17:51  댓글주소  수정/삭제  댓글쓰기

    아! 찾았습니다. ^^

    근데 질문이 있습니당~~

    버튼 색깔을 바꿀땐

    [[UIBarButtonItem appearance] setTintColor:[UIColor blackColor]];

    네비게이션 색을 바꿀땐

    firstviewNavi.navigationBar.tintColor = [UIColor blackColor];


    이렇게 되어있는데 이것두 Obj C 문법 스타일 / C/C++ 문법스타일 차이인건가요~?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.05.16 18:06 신고  댓글주소  수정/삭제

      두가지 스타일 다 똑같다는걸 보여드리려고 일부러 그렇게 해 봤습니다 ㅎ
      [[firstviewNavi navigationBar] setTintColor : [UIColor blackColor]]; 로 작성하셔도 무방합니다. ㅎㅎ

  8. NeoSeo 2012.06.13 17:21  댓글주소  수정/삭제  댓글쓰기

    너무나 잘보고 있습니다. 감사합니다.
    궁금한게 있어서 질문드립니다.

    저는 퍼스트뷰에서 클릭을 해서 두번째 네비로 가면
    두번째 뷰에서 타이틀이 안나옵니다. 즉 타이틀 "Second View" 라는게 안보이네요..

    혹시 몰라
    AppDelegate.m에서
    UINavigationController *secondViewNavi = [[[UINavigationController alloc] initWithRootViewController:viewController2] autorelease];

    self.tabBarController.viewControllers = [NSArray arrayWithObjects:firstViewNavi, secondViewNavi, viewController3, nil];

    이렇게 해주면 "Push ViewController"버튼을 누르면 안나오고, 밑에 Second탭을 누르면 나옵니다.

    추가로 해줘야 할것이 있나요?
    너무 초보적인거 같지만 많이 해메고 있네요..

    • NeoSeo 2012.06.13 17:46  댓글주소  수정/삭제

      자답입니다.
      바로 전 글에서 new 보다는 alloc를 지향하라고 하셔서

      SecondViewController *secondViewController = [[SecondViewController new] autorelease];
      -->
      SecondViewController *secondViewController = [[SecondViewController alloc] autorelease];

      로 수정해서 했더니 안나왔습니다.

      여기서는 꼭 new로 해야만 하는 이유가 있는 건가요?

      아니면 제가 완전 잘못 이해한건가요?

      여기서 너무나 많은걸 배우고 있습니다. 감사합니다.

      첨부 구글링했습니다.
      id anObject = [NSObject new]; // Creates and returns an initialized object

      id anotherObj = [NSObject alloc]; // Not yet ready for use...
      라고 하네요..차이점은 알겠지만...그냥 차이점만 대충 알겠네요..어떻게 적용되는건지는-_-

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.13 18:05 신고  댓글주소  수정/삭제

      아하~^^*
      단순히 alloc만 하면 메모리 할당을 하지만 객체를 초기화 하지 않습니다.
      그래서 alloc을 하면 init을 꼭 해주어야 합니다.
      init은 항상 alloc의 동반자 입니다. ㅎ
      [XXX alloc];
      [XXX init];
      이 뜻은 XXX를 위해 메모리를 할당 한 후 초기화 하여라.

      라는 뜻인데요
      간단하게 한줄로 [[XXX alloc] init]; 이라고 표현하기도 합니다.

      따라서
      [XXX new]를 대체하려면 [[XXX alloc] init] 이라고 표현해 주어야 합니다 ㅎ

      충분한 답변이었는지 모르겠네요.
      좋은 질문 고맙습니다^^*

  9. NeoSeo 2012.06.14 09:17  댓글주소  수정/삭제  댓글쓰기

    너무 감사합니다.
    차근차근 공부하고있습니다. 너무 좋은 자료와 정보 감사합니다.
    음 몬가 제2의 taeyo를 보는듯한 느낌!

  10. 열심히 따라하기 2012.06.26 22:01  댓글주소  수정/삭제  댓글쓰기

    안녕하세요! 이런 강좌가 있는지 몰랐어요.

    어플 개발에 발을 들여놓으려고 몇 번 시도하다가 계속 마음을 접었었는데,

    제대로 잘 배울 곳이 생겨서 기분이 좋습니다 ^^


    코멘트를 다는 이유는,

    이 강좌 내용중에

    맨 위의 bar색깔 바꾸는 방법이요.
    UIBarButtonItem appearance 말고
    UINavigationBar appearance로 하니까

    bar의 색깔이 바뀌네요.
    강좌대로 UIBarButtonItem을 쓰면 저는 적용이 안 되요. 뒤로가기 버튼만 색이 바뀌더라구요.

    Xcode 4.3.3에서 iPhone 5.1 Simulator 쓰고 있습니닷.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.26 23:55 신고  댓글주소  수정/삭제

      안녕하세요 :-)
      도움이 된다고 하니 기분이 좋습니다 ㅎ
      코멘트 달아주신 내용이 맞습니다 ㅎ
      오해의 소지가 있는 것 같아서 본문을 조금 수정했습니다.
      제 말뜻은 그 안에 들어가 있는 바 버튼 아이템들의 틴트색상이 변경된다는 것이었는데 바까지 변경된다는 뜻으로 와전된 것 같습니다.
      지적 고맙습니다. ^^*
      자주자주 들러주세요 ㅎ

  11. 초보kay 2012.07.24 02:03  댓글주소  수정/삭제  댓글쓰기

    안녕하세요!
    코드를 보면서 잘 이해되지 않던 부분들이 님의 마지막즈음의

    "어떤 속성값(property)에는 self.navigationItem.title = @"title" 처럼 점으로 구분해서 들어가구요.

    어떤 속성값은 [[self navigationItem] setTitle :@"title"]; 식으로 설정하기도 하니깐요...ㅎㅎ

    그러나 결론은 !! 같다! 입니다^^"

    을 보곤 쫘악 해명되네요.

    좋은 강좌 감사드립니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.24 09:08 신고  댓글주소  수정/삭제

      ㅎㅎ 덧글의 세 번 째 줄까지만 읽고
      '본문에 나와있는데...'
      라고 생각했다가 그 다음 줄 읽고 한 짐 놓았네요 ㅎㅎㅎ
      역시 사람말은 끝까지 들어봐야 한다니까요 ㅎㅎ
      불같은 덧글 고맙습니다 :-)

  12. neoaero 2012.07.26 12:37  댓글주소  수정/삭제  댓글쓰기

    평소 이해 안되던게 하나둘 풀리고 있습니다. ㅋㅋ
    yagom님 실력이 대단한가봐야..이렇게 쉽게 글을 쓰실수 있으니 말이예요..^^

  13. chosamong 2012.08.24 16:40  댓글주소  수정/삭제  댓글쓰기

    이론~

    북스타일의 앱을 만들었는데 개념이 없어서 책갈피 구현을 못하고 있어요.
    부끄러운 제 자랑질 ~ ^^a
    http://itunes.apple.com/app/id492516072?mt=8

    좀 내용이 기다란 책에 책갈피, 검색 기능 등 완성도 높은
    북을 안 내놓는다고 투덜대는 독자분덜이 쬐금 있는데
    능력이 부족해서 딱 멈췄어요.

    거의 포기 상태인데 야곰님 강좌를 발견해서 개념 정리 들어가니
    또 의욕 살아나서 가능성을 점치며
    강의 실습하다, 구글링하다, 도큐먼트 예제 소스 살피다.
    이리저리 왔다갔다 정신없이 보다 보니
    최신 댓글에 제글에 대한 답글까지 ~ !!

    무한 감격이 ~ ^^;

    많은 분들의 열렬한 성화에 소임이 꾸려지길 기대하며
    저는 차분히 강좌 따라하며 좀 기본기를 다지고

    야곰님은 훈련 잘 다녀 오시길... ^^;

    역시나 이 글도 감사 인사
    꾸우벅 ~~ <(__)>

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 16:47 신고  댓글주소  수정/삭제

      헤헤, 저야말로 이렇게 글을 남겨주실 때 영광입니다 :)
      더 좋은 앱 만드셔서 많은 분들의 열렬한 성화를 잠재우시고 열렬한 팬으로 바꿔 주세요 ㅎㅎㅎ
      저도 더 좋은 앱 나오길 기대해 봅니다 ㅎㅎ
      앱 업뎃하시면 저한테도 귀뜸 해주시는거죠?ㅋㅋ

  14. chosamong 2012.08.24 17:17  댓글주소  수정/삭제  댓글쓰기

    야곰님 관심은 저의 영광이지요 ^^;

    할 수 있을지 자신은 없는데
    잘 되면 자랑질 도배 하겠습니다. ^____^;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 17:34 신고  댓글주소  수정/삭제

      ㅎㅎㅎ 1층짜리 건물을 짓든 123층짜리 건물을 짓든간에 전부 시작은 삽을 한 번 뜨는거죠~ㅎㅎ
      시작해 보세요~! 기대할게요 ㅎㅎ

  15. asrada 2012.10.27 00:07  댓글주소  수정/삭제  댓글쓰기

    정말강좌가 매회대박이네요

    멈추지 않고 달리셨으면 합니다. 개인적인 바램으로는 멋진 개발을 할 수 있을 것같네요~!!

    감사합니다( __)

  16. 딴또 2013.03.07 16:27  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다. 오늘도 열심히 공부할 수 있게 해 주셔서 너무 감사합니다.

  17. tweeboo 2013.03.15 15:43  댓글주소  수정/삭제  댓글쓰기

    강의가 너무 도움이 된답니다. 질문하고 싶은점이 있는데 혹시 아이폰 기본 메모장처럼,
    타이틀바의 오른쪽에 +버튼을 클릭하는 형태의 네비게이션 컨트롤러는 어떻게 구현하는지 배울 수 있을까요???

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.03.18 18:02 신고  댓글주소  수정/삭제

      음...
      http://stackoverflow.com/questions/1219779/how-to-add-a-right-button-to-a-uinavigationcontroller
      여기를 참고해 보시면 될 것 같습니다 :)
      바 버튼 아이템으로 구현하면 됩니다 ^^

  18. Hide 2013.11.11 20:56  댓글주소  수정/삭제  댓글쓰기

    감사합니다. %%


오늘의 주제

1. 네비게이션 컨트롤러 사용해 보기 


열 두번째 시간입니다.^^

지난 번에는 개발지식의 보고 개발문서를 알아보았습니다.
한 번 쭈욱 둘러보셨는지요?
정말 중요한 것이니 몇 번을 보고, 다른 싸이트를 검색하고, 직접 계속 둘러보면서 꼭 몸으로 익히도록 하세요~!

자 그럼 오늘은 네비게이션 컨트롤러를 사용하여 화면 전환을 해 보도록 하겠습니다^^
스따뚜~~~~~~~~~~~~


# 네비게이션 컨트롤러란?


네비게이션 컨트롤러는 차에 달려있는 네비게이션이 아니구요...ㅎㅎ
아이폰 설정창에 들어가서 각각 셀을 누르면 다른 화면으로 스윽 밀려 들어가지요?
그리고 back버튼을 누르면 다시 돌아오구요...ㅎ
이게 바로 네비게이션 컨트롤러가 하는 일입니다~!

# 네비게이션 컨트롤러 붙여보기

뭐... 일단 실습 해 보도록 하죠 뭐 ㅎㅎㅎ
계속 사용중이던 프로젝트를 꺼내 봅시다~
MyFirstTabbedApp 아시죠?ㅋㅋㅋ
FirstViewController.h 파일로 가 봅시다.
커스텀 메소드를 만드는 것이 지금 하는 것보다 약간 더 간편한 방법도 있지만, 그거는 미리 캡쳐를 못했네요...ㅎㅎ
그건 요거 좀 알게 되면 추후에 알려드릴게요^^
무슨말인지 잘 모르시겠다구요? 일단 따라와 보세요 ㅋㅋ 시작합니다~
빨간 네모 따라오시면 돼요~


헤더파일 (***.h)에 작성 끝내셨으면 이제 구현파일 (***.m)으로 갑니다.
헤더파일이 뭐고 구현파일이 뭐냐구요?
음... 책으로 비유해 봅시다.ㅎ
책 첫장에 목차랑 서문이 있고 뒤에 가면 본문과 내용이 있죠?
헤더파일은 목차랑 서문이라고 생각하시고 구현파일은 본문이라고 생각합시다.
헤더에서 이 클래스는 어떤어떤 기능을 한다. 어떠어떠한 메소드와 어떤 변수들이 있다.. 라고 써놓고, 구현파일에 와서 그에 대한 상세한 기술을 하는 거예요. 대충 감이 오시나요?ㅎㅎ

자, 구현파일에도 요대로 써 봅시다~
네비게이션 컨트롤러에서 다음 화면으로 넘어갈 때는 뷰 컨트롤러를 푸쉬 해 줍니다. 반대로 나올때는 팝 합니다.
이는 메모리를 생각해 보면 알 수 있는 용어인데요, 메모리 안에다가 새로운 어떤 녀석을 집어 넣어줘야 하니까 메모리 안으로 푸쉬 해주고~
필요없어져서 빼버릴땐 메모리에서 팝! 하고 꺼내는거죠 ㅋㅋㅋ
그래서 지금 밑에 보시면 pushViewController 가 보이시죠?
Objective-C는 이렇게 메소드명이 실제언어와 흡사하고 직관적인 것이 특징이자 매력입니다.ㅎㅎㅎ 메소드 이름만 봐도 대충 뭐하는 놈인지 감이 오잖아요 ㅎㅎㅎ


자, 일단 여기로 오기 전에 헤더파일과 구현파일을 미리 저장 해 줍시다. 헤더파일에서도 커맨드+s로 저장해 주시고, 구현파일에서도 커맨드+s로 저장 해 줍시다.
자 그리고 이제 xib파일로 와 봅시다.
그리고 Round Rect Button 하나를 쭈욱 끌어와서 넣어주구요~
이쁘게 위치도 잡아주고, Title을 달아줍니다 ㅎㅎ Title은 사실 넣어줘도 안넣어줘도 그만~ㅋㅋㅋ


자 이제 아래 그림에서 보듯이 버튼을 마우스 오른쪽 클릭하면서 File's Owner로 쭈욱 끌어당겨서 파란색으로 표시가 되면 놓아줍니다.
혹은 컨트롤키를 누른 상태로 마우스 왼쪽 버튼을 누른 상태로 드래그 앤 드롭 해 주셔도 됩니다.
그러고 나서 검은색 선택 박스가 나오면 잘 하신겁니다. 또 아래그림 참조 하세요^^


이런 검은색 박스가 새초롬 하게 뜨면 성공하신 겁니다. 물론 처음 연결하면 앞에 동그라미는 안생겨 있어요^^
자 그럼 이제 우리가 미리 헤더파일에 선언해 주었던 메소드 goToSecondViewController를 클릭해 줍니다!!
그럼 어디선가 파란것이 반짝반짝 할거예요~ㅎㅎㅎ
혹시 모르니깐 다시 한 번 해 보세요. 요 밑에서처럼 동그라미로 체크가 되어있는지. 그럼 잘 연결이 된 거예요~


우리는 지금 FirstViewController에 버튼을 하나 추가하고 네비게이션 컨트롤러 관련 메소드를 추가해 준겁니다. 그러니깐 FirstViewController의 인스턴스가 네비게이션 컨트롤러 안에서 작동하게 해야 합니다.
잘 이해가 안가시죠?ㅎㅎ
네비게이션 컨트롤러는 한 개 또는 복수 개의 뷰 컨트롤러 들을 자신이 컨트롤 하는 방식입니다.
자신의 실체는 없지만 그 뷰 컨트롤러들을 넣었다 뺏다 할 수 있는 녀석이죠...
지금 당장은 잘 이해가 안가지만 일단 한 번 오늘거를 만들어 봅시다.
궁금증이 폭발하시는 분은 개발문서에서 UINavigationController와 그에 관련된 것들을 쭈욱 읽어보시는 것도 좋을 것 같네요^^

자, 그럼 이제 마지막 관문~
AppDelegate.m으로 옵니다.
FirstViewController의 인스턴스가 네비게이션 컨트롤러 안으로 들어가야 한다고 했죠? (인스턴스 이해 안가시면 앞에가서 다시 읽고오세요...ㅎ)
그러기 위해서는 새로운 네비게이션 컨트롤러를 하나 만들어 줍니다.(위의 빨간네모) 생성할 때 보면 initWithRootViewController 라는 곳 안에 viewController1이 들어가죠? init이라는 것은 초기화 한다는 것인데, 지금 새로 생성하는 네비게이션 컨트롤러의 최 상단 뷰컨트롤러가 viewController1인 네비게이션 컨트롤러로 초기화 하겠다. 라는 뜻으로 해석 되시나요?ㅎ
참고로 viewController1은 FirstViewController의 인스턴스입니다.

그리고 나서는 탭바컨트롤러에 원래 viewController1, viewController2, viewController3를 넣었었는데, firstViewNavi, viewController2, viewController3를 넣어줘 봅시다.


자! 그리고 이제 드디어 대망의 실행타임~~~~~~~~~~
커맨드+R로 실행해 봅니다 ㅎㅎㅎ


네비게이션 잘 동작하시나요?ㅎㅎㅎ
버튼 누르면 SecondView가 나오죠?
그리고 뒤로가기 버튼을 누르면 다시 돌아오구요 ㅎㅎㅎ


그리고 탭바도 이상없이 잘 동작합니다~
세번째로 갔다가 다시 첫번째로 돌아와도 네비게이션은 아직 잘 동작하고 있습니다 ㅎㅎㅎ 


후아~~~~~~~~~~~~~

네비게이션으로 화면 움직이기 한 번 해봤는데요, 어떠신가요?

아직 답답하고 99% 부족해 보이고 무슨말인지도 잘 모르겠고, 왜 이걸 하고 앉아있는지도 잘 모르실거예요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

그 기분 잘 알아요~ 하지만, 이건 정말 조금 후를 위한 준비과정이니까 조금만 따라와 주세요~

얼마 지나지 않아 요령껏 잘 하고 있는 자신의 모습을 보게 되실테니까요 ㅋㅋㅋ

그럼 저는 다음에 또 알찬 정보를 가지고 돌아오겠습니다~~

뿅!!


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기  
 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 초보kay 2012.07.24 00:53  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다.
    하나씩 따라하니 정말 잘 되는군요.
    한가지 의문되는것은 FirstViewController의 헤더파일에는 네비게이션콘트롤러를 선언하지 않고도 FirstViewController.m파일에서 자기 클라스의 성원변수처럼 [self.navigationController pushViewController...]와 같이 호출하였는데 이것을 잘 모르겠습니다.
    딜리게이트구현파일에서 야곰님 말씀대로 FirstViewController의 인스턴스가 네비게이션안에 들어가게만 하면 구현파일의 임의의 함수에서도 네비게이션을 호출할수 있다는 의미인지 감이 잘 잡히지 않네요.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.24 09:06 신고  댓글주소  수정/삭제

      네 맞습니다.
      어떤 뷰 컨트롤러의 상속 뷰 컨트롤러든간에 네비게이션 컨트롤러의 하위 뷰 컨트롤러가 되면 자신의 self.navigationController를 사용할 수 있습니다.
      그렇기 때문에 FirstViewController든 어떤 뷰 컨트롤러든 간에 네비게이션 컨트롤러의 종속 뷰 컨트롤러라면 자신의 뷰 컨트롤러에서 네비게이션 뷰 컨트롤러를 호출 할 수 있습니다.

      즉, 네비게이션 컨트롤러의 컨트롤 안에 들어가게 되면 그 뷰 컨트롤러의 navigationController 프로퍼티가 해당 네비게이션 컨트롤러로 설정이 되며, 만약 네비게이션 컨트롤러에 의해 컨트롤 되지 않고 있다면 해당 프로퍼티(navigationController)는 nil 값으로 설정되어있을 거예요 ㅎ

  3. 초보kay 2012.07.24 10:46  댓글주소  수정/삭제  댓글쓰기

    상세한 설명 정말 감사드립니다.

  4. neoaero 2012.07.26 11:47  댓글주소  수정/삭제  댓글쓰기

    저도 self.navigationController가 잘 이해되지 않는데..
    탭바의 첫번째 탭은 navigationController안에 firstviewController가 있기 때문에 firstviewcontroller를 navigationController에 넣으려고 하니깐 self.navigationController을 사용하는 건가요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.26 12:47 신고  댓글주소  수정/삭제

      FirstViewController가 navigationController의 컨트롤 하에 있기 때문에 자신을 관장하는 네비게이션 컨트롤러를 호출하는 것이 self.navigationController 프로퍼티 호출입니다..^^*

  5. CSM 2012.07.27 20:24  댓글주소  수정/삭제  댓글쓰기

    저는 조금 다른 문제에 봉착했는데요.... 실행만 시키면 Thread 1: EXC_BAD_ACCESS (code 블라블라) 이런식으로
    에러가 나서 실행이 안되네요 ㅜㅜ 도대체 어디가 문제인지 모르겠습니다;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.27 21:23 신고  댓글주소  수정/삭제

      안녕하세요 CSM님~!
      BAD_ACCESS 가 나왔다면 메모리 참조를 잘못한 것입니다.

      alloc되지 않은 메모리 영역을 침범한다던가, 잘못된 메모리 영역을 침범하였거나... 가장 잦은 것은 이미 해제된 메모리에 접근하였을 때 발생합니다.

      잘못된 객체에 접근을 시도하였는지 확인해 보시기 바랍니다^^

  6. dobo 2012.07.30 17:54  댓글주소  수정/삭제  댓글쓰기

    강의 너무너무 고맙습니다!!
    근데..
    음.. 저는 왜.. 마지막 부분 ApleDelegate.m 에 두번째 UINavigation controller *firstViewnavi 에서 왜
    unused variable 'first ViewNavi'
    경고가 뜰까요??

    런은 되는데.. 버튼을 눌러도.. 이동하지 않습니다. ㅜㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.30 19:09 신고  댓글주소  수정/삭제

      안녕하세요 dobo님~!
      경고는 말 그대로 firstViewNavi라는 녀석이 만들거나 선언된 이후로 쓰이지 않았다는 뜻입니다.
      만들어놓고 쓰지 않았는지 확인해 보시면 됩니다 ^^*

  7. chosamong 2012.08.24 15:01  댓글주소  수정/삭제  댓글쓰기

    드뎌, 그렇게도 어렵던 네비게이션에 도전하게 되었습니다.

    역쉬나 첫번째 따라하기 실패~ ! ㅜ.ㅜ;
    전 아예 탭이 하나 더 생겨서 네개가 되는군요.

    현재 Xcode 4.4.1인데 코드 부분을 보니
    AppDelegate의 디폴트로 생성된 self.tabBarControll.viewControllers의 코딩이 좀 다르군요.

    다시 도전해 보겠습니다.

    진심으로 감사의 마음을 담아서
    꾸벅 <(__)>

  8. chosamong 2012.08.24 15:14  댓글주소  수정/삭제  댓글쓰기

    코드 문제가 아니었군요.
    다만 눈이 잠시 무르게 나빠졌을 뿐

    잘 되네요.
    이렇게도 되다니...

    탭바에서 세컨드 탭바로 넘어가 볼려구 그렇게 찾아도 자료가 없더니
    야곰님의 강의를 통해서 구현 되니 실로 감격 스럽습니다.

    여전히 첩첩 산중이지만...
    감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 15:40 신고  댓글주소  수정/삭제

      잘 해결되셨다니 다행입니다 ㅎㅎㅎ
      너무 빨리 소화하려다 보면 탈이나게 마련이니 천천히 되짚어 보면서 쉬엄쉬엄 가세요 :)

  9. snoopy 2012.09.04 17:15  댓글주소  수정/삭제  댓글쓰기

    self.tabBarController.viewControllers = [NSArray arrayWithObject:firstViewNavi, viewController2, viewController3, nil];

    위 부분에서 'Too manu arguments to method call, expected 1, have 4' 라는 에러 메시지가 나타나는데 어떻게 해야할까요?

  10. 에네스케이 2012.10.28 23:02  댓글주소  수정/삭제  댓글쓰기

    좋은 강좌 1강부터 잘 보고있습니다.

    다만 한가지 궁금한게 있는데 네비게이션 바를 추가한 뒤 화면이 눌려서 그런지 사각버튼이 제가 지정한 위치에 있질 않네요(텍스트 뷰를 가림).

    xib에서 직접 네비게이션바를 추가하고 소스코드와 연동하는(사실 이걸 몰라요ㅠㅠㅠ)게 아니라 소스코드에서 직접 네비게이션바를 추가해서 그런듯 한데 어떻게 해결해야 좋을까요?

  11. hyung 2012.11.13 14:59  댓글주소  수정/삭제  댓글쓰기

    음~ 네이게이션을 이렇게 쓰는 거였군요 ^^
    그런데 야곰님 xib파일을 하나더 만들지 않고 하나의 xib파일안에서 view를 여러개 만들어서 그 뷰끼리 화면이동은 못시키나요?
    스토리보드에서 modal로 끌어다 쓰는거 같이요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.13 15:15 신고  댓글주소  수정/삭제

      스토리보드에서 모달로 불러쓰는것도 마찬가지로 뷰 컨트롤러를 여러개 생성하는 것으로 알고 있습니다.
      네비게이션 화면전환은 뷰 컨트롤러끼리만 가능합니다 :)

    • hyung 2012.11.13 16:07  댓글주소  수정/삭제

      그렇군요 ~~ 항상 친절한 답변 감사 드립니다

  12. Mins 2012.11.25 21:59  댓글주소  수정/삭제  댓글쓰기

    열씨미 보고 따라하면서 배우고 있습니다
    초보라 모르는거 투성인데요
    질문하나 드릴꼐요
    위의 소스대로 따라서 해봤는데 엉뚱한 결과가 나와서..도저히 뜯어봐도
    제 실력으론 도통 모르겠네요..
    일단 탭바아이콘이 네개가 나오구여 첫번째 탭바도 first 두번째 탭바도 first 네여..
    첫번째 탭바 누르면 검은색화면에 네비게이션바는 나옵니다.
    나머지탭바들을 클릭하면 화면은 다 나오는데 네비게이션바는 안나오고여
    FirstViewController.xib에서 만들었던 버튼도 먹통이고...
    천천히 보면서 다시 해봐도 결과는 그대로네여..멘붕옵니다..도와주세요
    참고로 저는 X-code 4.5 쓰고 있습니다..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.26 10:56 신고  댓글주소  수정/삭제

      탭바는 세 개가 나오는게 정상이구요,

      AppDelegate 소스쪽에서 뭔가 헷갈린 부분이 있는 거 같습니다 ^^;
      코드를 한 번 다시 잘 살펴보시구요~

      첫 번째 탭바 외에는 네비게이션 컨트롤러가 없는 것이 정상입니다...^^

      버튼은 xib에서 오른쪽 버튼 눌렀을 때 메소드가 잘 연결 되어있는지 확이해 보시고 연결되어있지 않다면 다시 연결해 보시면 될 것 같습니다~

  13. jinbok 2013.01.24 17:23  댓글주소  수정/삭제  댓글쓰기

    잘배워 갑니다. ^^

  14. nadeko 2013.01.25 16:13  댓글주소  수정/삭제  댓글쓰기

    goToFirstViewController 부분의 FirstViewController의 인스턴스(?)를 선언할때 new가 아닌 alloc으로 처리하니 네비게이션으로 넘긴 페이지의 타이틀이 네비게이션바에 나타나질 안던데 무슨차이 일까요..?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.26 12:16 신고  댓글주소  수정/삭제

      오이잉.. 왜그럴까요?
      alloc후에 initWithNibName도 해 주신건가요?

    • 철이 2013.07.19 11:22  댓글주소  수정/삭제

      저도 뒤늦게 공부하는 처지라 자세히는 설명하지 못하지만
      네비게이션바에 나타나지 않던 문제는 alloc으로 할당한 후에, init으로 초기화를 해주지 않으셔서 나타난 문제 같네요
      new를 alloc으로 바꾸신 코드 뒷줄에 init 추가하시면 될 것 같아요
      [[[SecondViewController alloc]init] autorelease];
      출처 [http://en.wikibooks.org/wiki/Cocoa_Programming/Objective-C_basics]

  15. 행복한 하루 2013.01.25 20:10  댓글주소  수정/삭제  댓글쓰기

    야곰님 안녕하세요 질문 좀 드릴게요

    FisrtViewController 클래스가 있고 SecondViewController클래스가 있는데요

    FisrtViewController 클래스에서 선언한 NSSttring *idVal; 가 있는데

    idVal에 NSString형 어떤 값이 있구요.

    그런데 SecondViewController 클래스에서
    FirstViewController 클래스에 있는 NSString *idVal에 접근해서
    idVal 값을 바꾸고 싶은데

    어떻게 해야 하는지요?

    제가 SecondViewController 클래스에서
    FisrtViewController *frt = [[FirstViewController alloc]init];
    frt.idVal = idStr; (idStr은 SecondViewController 클래스 에서 구한 NSString형 어떤 값 입니다.)

    이렇게 했는데 전혀 FirstViewController클래스에 있는 idVal
    값이 변화가 없네요 쩝

    제가 봐도 새로 메모리 할당하고 초기화 해버리니 전혀 다른 객채 생성인것 같아 맞지 않은것 같기한데요.

    어떻게 해야 할지 부탁드려요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.26 12:24 신고  댓글주소  수정/삭제

      FirstViewController 에서 idVal이 property로 설정이 되어있는 상태이겠지요?

      property로 선언 한 후에 변경해주면 값이 변경되어 들어가게 되는데...

      요상요상하네용~_~

      혹시 탭바에 다른 두 컨트롤러가 있을 때 FirstViewController와 SecondViewController 간의 자료교환이 필요하신건가요?

      그렇다면 SecondViewController에서 [self tabBarContoroller] 였나..

      자신의 탭바 컨트롤러를 불러와서 그 컨트롤러의 viewControllers였나... 이 메소드로 뷰 컨트롤러 객체들을 담고있는 NSArray를 가져와서

      FirstViewController를 가져온 후 idVar를 가져와야겠군요..^^

  16. 딴또 2013.03.07 15:22  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 감사합니다. 문법을 이해하기가 난해하군요. 하지만 열심히 공부해 보겠습니다.

  17. 새내기개발자 2013.04.02 18:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. ios시작한지 일주일된 새내기 입니다....;;
    안드로이드 개발인데 회사에서 ios개발하라고 해서 머리 아퍼죽겠습니다.
    그러던중 야곰님의 블로그를 발견하고 엄청난 도움을 얻고 있습니다.
    감사합니다.

    질문입니다만
    위의 설명은 소스코드에서 생성? 하잖아여

    전 xib파일에서 A-controller, B-controller 각각 네비게이션바를 붙이고 버튼을 삽입했습니다.

    uiNavigationController = [[UINavigationController alloc] initWithRootViewController:self.ViewController];
    요렇게 하면 제가만든 네비게이션바 위에 또 디폴트의 네비게이션바가 나오더라구여

    요점은 xib에서 마우스로 네비게이션바를 만든후 데리게이트등에 적용하는방법
    혹시 아시면 팁이라도 주심 감사하겠습니다.

    첫글남기면서 질문까지 드려 죄송합니다.
    그럼 부탁드립니당

    스토리보드는 초보자는 사용안하는게 좋다해서 xib로 했는데 어렵네요 ㅎ;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.03 09:12 신고  댓글주소  수정/삭제

      안녕하세요, 반갑습니다.

      음... 네비게이션 컨트롤러에 뷰 컨트롤러를 붙이면 자동으로 기본 네비게이션 바가 생성이 됩니다.

      만약에 커스텀 네비게이션바의 생성을 원하신다면, 제 포스팅 중에 커스텀 네비게이션바를 만드는 예제가 있으니 참고하시면 될 것 같습니다 :)

  18. 새내기개발자 2013.04.03 11:49  댓글주소  수정/삭제  댓글쓰기

    빠른 답변감사합니다.
    말씀하신 예제 보고 연구해 보겠습니다.^^

  19. 새내기개발자 2013.04.03 18:43  댓글주소  수정/삭제  댓글쓰기

    안녕하세요... 어찌어찌 완성했습니다^^

    감사합니다.

    질문계시판이 아닌데 자꾸 질문드려서 죄송합니다.
    혹시 textView의 개행 제한 하는법 아시나요?

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    위메소드 안에 아래 조건문을 넣어서 int값에다가 더해준다음 2가되면 리턴되게끔하면 될런지.. 근데 해보니 안되네여...
    if ([text isEqualToString:@"\n"]) {
    count++;
    }

    위의 코드에서 문제는 개행키를 눌렀을때 text에" " 아무값도 없다는거.....;;;;;;

    방향만 설며해주셔도 감사합니다.

    ios잼나요,ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.04 09:28 신고  댓글주소  수정/삭제

      relacementText를 체크하여 만약에 개행문자가 들어온다면 NO를 리턴하고, 그 외의 문자라면 return YES를 해 주시면 개행문자를 사용자가 입력하여도 입력되지 않습니다~ :)

  20. devtest 2013.07.10 13:12  댓글주소  수정/삭제  댓글쓰기

    autorelease의 역할이 뭐예요ㅜㅜ?
    autorelease를 쓰면 오류가 생기는데 없이 하려니까 제대로 출력이 안되네요.
    autorelease를 쓸때 빨간줄로 그어져서 decrements the receiver's retain count at the end of the current autorelease pool block. 라고 뜨는데 왜이럴까요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.11 08:56 신고  댓글주소  수정/삭제

      검색을 먼저 해 보심이 좋을 것 같습니다... ^^;

    • seungjae 2013.07.26 03:14  댓글주소  수정/삭제

      프로젝트 만드실때 처음에

      ARC 해제하셔야되요!

      이게 Auto-Resource-Correction인가 그거 체크해제하고 다시만드시면 될거에요. 리소스관리해주는 걸 우리가 직접하게 쓰는 걸로 일단 초기에 공부하고 아마 뒤에서는 다른파일로 하시겟죠?ㅋㅋ 맞는지 친절한 설명 부탁드립니다 야곰님

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.26 09:21 신고  댓글주소  수정/삭제

      네, 초반에 기초 개념 때문에 ARC를 사용하지 않았었습니다...^^
      이제는 앞으로는 큰 의미가 없어지겠군요...ㅎ

  21. 하이앟 2013.09.29 00:28  댓글주소  수정/삭제  댓글쓰기

    야곰님 질문이 있습니다. 위에도 비슷한 이야기가 있는 것 같은데..
    storyboard를 사용해서 FirstViewController 앞에 네비를 넣고 FirstViewController의 h와 m파일에 빨간박스에 있는 코드를 추가해서 그냥 해봤는데요..
    저도 역시 그냥 까만 화면이..xib파일이 없어서 그렇게 되는 것 같은데요.

    스토리보드 상에서 FirstViewController에 있는버튼에 control drag&drop을 해서
    SecondViewController로 segue를 연결하면 TabBarController와 뭐가 엉키는지(?자세힌 모르겠습니다.. 제가 초보자라) 버튼을 누르면 바로 튕기네요.. main.m에 에러있다면서. (..에러라기보단..그 초록색으로 breakpoint 라면서 나오는거요)

    이럴 때.. 스토리보드는 그대로 이용하면서 FirstViewController와 SecondViewController를 버튼으로 연결시킬 수 있는 방법을 혹시 알고계시면 좀 알려주실 수 있을까요? 부탁드립니다..!


오늘의 주제


1. Document 살펴보기


열한 번째 시간입니다.

지난 번에는 탭바를 기반으로 한 어플 하나를 만들어 보았습니다~
이 당분간은 이 탭바를 가지고 진행할 예정이오니 프로젝트를 지우지 마시고 계속 따라와 주세요~!ㅎㅎ
이제 슬슬 재미좀 붙이고 계신지 모르겠네요^^

오늘은 개발에 꼭 필요한 문서를 보는 방법을 알려드리려 합니다~
물고기를 잡아드리는 것이 아니라 잡는 법을 좀 알려드려야겠죠?ㅎ

이 Document에는 개발에 필요한 첫 밑거름 부터 심오한 내용까지 모두 담겨져 있습니다.
이 개발 문서만 가지고도 충분히 개발할 만한 강력한 무기입니다.
물론 영어라서 조금의 힘든점은 있지만, 그래도 사용할 줄 알아야 합니다!
서론이 길었네요 ㅎ
시작합니다~!

# 개발문서

개발 문서는 요로코롬 생겼습니다~!ㅎ


그럼 이제 직접 개발문서를 열어보도록 할까요?
열 수 있는 방법은 많습니다~
일단 첫 번째로, Xcode 메뉴에서 Help - Documentation and API Reference 를 클릭하는 방법!
두 번째로, 단축키를 사용하는 방법 : Shift + Alt + Command + /


세 번째로, 궁금한 객체를 Alt + Click 하는 방법
알고 싶은 객체 위에 Alt + Click하면 그에 대한 도움말이 나옵니다.
거기서 Reference를 누르면 개발문서로 이동합니다.



네 번째로, Quick Help창에서 눌러보는 방법
궁금한 객체로 커서를 옮기면 Quick Help창에 간단한 설명이 나옵니다. 거기서 Reference를 누르면 개발문서로 이동합니다~



자... 그래서 일단 UIImage (이미지 객체)의 Reference로 이동해 보았습니다.
간단히 살펴보자면, 
이 객체는 NSObject에서 상속받았고 (상속은 다음에 설명해 드릴게요^^)
NSCoding과 NSObject를 따르며
UIKit프레임워크를 사용하며
iOS 2.0이상에서 사용가능 한 객체이고,
UIImage.h라는 파일안에 선언이 되어있으며
관련있는 샘플코드로는 BubbleLevel, PhotoScroller... 등이 있네요^^
(이 샘플 코드들을 잘 해석하고 이용하기만 해도 엄청난 내공이 쌓이실거예요 ㅎㅎ)


Overview에서는 이 객체에 대한 간략한 개요가 나옵니다. 대충 읽어보시면 이 객체의 성격과 역할, 이용용도 등을 파악하실 수 있을거예요.
다양한 얘기들이 나오네요. 
이미지와 메모리 관리에 대한 이야기들, 지원하는 이미지 포멧 등등.
정말 많은 정보들이 수록되어 있죠?ㅎ
또 쭉 내려가 볼까요?


Task에는 이 이미지에서 이용 가능한 메소드(함수)들이 쭈욱 열거되어 있습니다.
이 이미지 객체를 구워 삶을 수 있는 방법들이 나와요.
이미지를 캐시하는 방법, 새로운 이미지를 만드는 방법, 이미지를 초기화 하는 방법, 이미지의 속성을 변경 할 수 있는 방법 등등 정말 많죠?ㅎ
이 많은 것들을 제가 일일히 다 알려드릴 수 없기 때문에 궁금한 내용이 있으면 이렇게 개발 문서를 찾아 보셔야 하는거예요 ㅎ


그런데 뭐가 뭔지 모르시겠죠?
파란색으로 써있으면서 뒤에 콜론( : )이 붙어 있는 녀석들은 메소드 입니다. C언어 에서 함수라고 생각하시면 될거예요. 더 쉽게 설명하자면 속성값이 아니라 우리가 명령을 내리면 어떠한 일을 수행하는 녀석들입니다.
또, 금색 글씨들과 빨간 글씨들이 보이죠?ㅎ
금색으로 property라고 써있는 녀석들은 우리가 속성 값을 바꿔 줄 수 있음을 의미합니다. 이 녀석들은 메소드가 아니고 하나의 변수라고 생각하시면 됩니다. (뒤에 콜론이 안 붙어있죠? 물론 메소드 중에 콜론이 없는 메소드 들도 많습니다^^)
또한 빨간색으로 쓰인 것은 왠지 빨간색이라 깨름칙 하죠?ㅋㅋㅋ
맞습니다. 이녀석들은 Deprecate 된 녀석들입니다. 
Deprecated in iOS 5.0 이라고 써 있으면 iOS 5.0에서 사용이 금지되어 있다 라는 뜻으로 이해하시면 되겠습니다.
또는 Available iOS 2.0 through iOS 3.1 등의 표기가 있으면 iOS 2.0 ~ iOS 3.1 에서만 사용 가능하다는 의미겠죠?ㅎ
이렇게 버전마다 사용할 수 없는 메소드들이 있기 때문에 문서를 보면서 혹시 하위버전에서 지원 가능한 것일까 아닐까를 체크해 주시는 것도 필요합니다.
만약 지원하지 않는 메소드를 사용하게 되면 폰에서 소위 말하는 튕김 현상이 발생하고, 또한 애플의 검수과정 중에 reject 즉, 등록 거부를 당할 수 있습니다.^^
 


또 이렇게 클래스 메소드, 인스턴스 메소드 등에 대한 설명들도 쭈욱 나옵니다.
클래스 메소드, 인스턴스 메소드가 뭐냐구요?
흐음... 일단은 그런게 있다고 쳐 둡시다 ㅎㅎ
다음에 필요하면 그 때 포스팅 하도록 할게요^^
포스팅 중에는 최소한의 필요한 코드로만 진행하려고 합니다~
좀 더 필요한 정보나 코드, 프로그래밍 기법이 필요하시면 댓글로 문의주시거나, 블로그에 Objective-C 포스팅을 참조하시길 바랍니다^^ 


자, 그럼 다른 것들도 찾아볼까요?
지난 번에 포스팅 하였던 탭바 컨트롤러에 대해 찾아봅시다.
좌측 상단에 검색창에 UITabBarController라고 입력해 봅시다. 물론 대소문자는 구별하지 않아요..ㅎㅎ
여기서도 많은 정보들이 나오네요. 기본적으로 나오는 내용들을 한 번 훑어 보세요~
조금 느낌이 오시나요?ㅎ


그림까지 첨부되어 개요가 나오고요~


개념 이해를 위한 상세한 설명까지 들어가 있네요.
정말 원더풀 하지 않습니까?ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
사실... 기초적인 지식만 가지고 있다면 정말 이 문서만 가지고도 개발 할 수 있습니다!


여기도 Task와 Property, Method 들이 주욱 나옵니다~



이런 식으로 문서를 한 번 훑어 보시면 됩니다.
궁금한 녀석들이 있으면 샘플 코드도 내려 받아 볼 수 있으니 얼마나 좋습니까?
비단 클래스 정보 뿐만이 아니라 개발 가이드, 시스템 가이드, 툴 가이드, 샘플코드 등등 정말 무궁무진한 정보의 바다입니다.
사실 문서 보는 법만 자세히 다뤄도 챕터 몇개는 할애할 수 있을 정도로 정말 필수 불가결한 녀석이 이 개발문서 입니다.

궁금한 것이 있다면? 구글을 찾아보기 전에 우선 개발문서 먼저..!! ^^
구글에서 무엇인가 찾았는데 사람들이 답변에 떡하니 ModalView에 대해 알아보세요~ 라고 던져주기만 한다면?
뒤도 돌아보지 말고 개발문서로..!!  ^^
무슨 말인지 아시겠죠?
스스로 찾는 힘을 기르는 것은 많은 지식을 아는 것 보다 훨씬 중요합니다.

그럼 다음 번에 또 알찬 내용으로 돌아오겠습니다~
필요한 내용이 있다면 댓글 남겨주세요^^

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기  


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓
Posted by yagom

댓글을 달아 주세요

  1. .a, 2012.01.31 18:47  댓글주소  수정/삭제  댓글쓰기

    잘 보고 있습니다
    감사합니다!!!

  2. 옥탑방원숭이S 2012.03.03 21:14  댓글주소  수정/삭제  댓글쓰기

    진짜 개발문서만 잘 활용해도 머릿속의 아이디어들을
    멋지게 구현할 수 있을 것 같네요 ^_^
    개발문서는 정말 잘 쓸 줄 알아야겠어요~~ ㅋ
    개발자분들과 얘기해봐도 문서들이랑 구글링 잘 하라고
    하던데 딱 필요한 내용이었네요^_^
    잘 봤습니다 !!

  3. Berry 2012.05.02 23:19  댓글주소  수정/삭제  댓글쓰기

    개발문서와 관련된 포스팅이 역시 없을리가 없었네요
    왜 11번 포스팅만 보지 않았을까요 ...
    이제라도 봐서 다행입니다 .. !!

  4. plateblack 2012.05.08 03:17  댓글주소  수정/삭제  댓글쓰기

    영어 공부도 되고 일석이조네요^-^
    아직 Objective-C에 대해서 잘 몰라서 특정한 용어들이 어렵기만 하지만...
    익숙해지겠죠? 하하하;;

  5. SODA 2012.06.27 16:47  댓글주소  수정/삭제  댓글쓰기

    덕분에 너무 공부 잘하고 있습니다. 포스트 정말 감사드리고 항상 행복하세요.^______^

  6. Sio 2012.07.16 16:33  댓글주소  수정/삭제  댓글쓰기

    잘보고갑니다~~!!ㅎㅎ
    으~ 영어 힘들어서 좀더 쉽게쉽게 할려고 구글링만 했었는데....
    개발문서나 구굴링이나 영어 천지니 이젠 좀더 개발문서와 친해지도록 해봐야 겠네요 ㅎㅎㅎ

  7. neoaero 2012.07.26 10:49  댓글주소  수정/삭제  댓글쓰기

    전 가끔 개발문서 보는데..기초가 부족해서 그런지..아직까진...이해도가 떨어져요..그래서..일단..지금은 기초를 쌓는데 노력하고 있습니다.. 개발 문서 너무 방대해요..^^

  8. chosamong 2012.08.24 14:27  댓글주소  수정/삭제  댓글쓰기

    도큐먼트 ~ ㅠ.ㅠ
    언어의 장벽이 OTL
    친해지도록 노력해야죠 : )

    감사의 인사를 꾸벅 <(__)>

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.08.24 14:44 신고  댓글주소  수정/삭제

      자주 보다보면 언어의 장벽을 넘을 수 있습니다.
      대충 느낌 팍팍 올 날이 있을거예요 ㅎㅎㅎ
      물론 영어실력도 늘면 더 좋겠지만요 :)

  9. kimsdn 2012.10.19 14:13  댓글주소  수정/삭제  댓글쓰기

    거의 매일 오고있습니다..
    다시 강의하는날까지 파이팅입니다.

  10. 딴또 2013.03.07 08:40  댓글주소  수정/삭제  댓글쓰기

    열심히 공부하겠습니다. 많이 가르쳐주세요.

  11. Hide 2013.11.10 14:29  댓글주소  수정/삭제  댓글쓰기

    감사합니다.

  12. 야곰님짜앙 2018.11.22 15:13  댓글주소  수정/삭제  댓글쓰기

    도움많이 되었어요


오늘의 주제


1. 기기별 Icon추가 및 관리하기
2. 해상도별 이미지 처리

열 번째 시간입니다.

지난번에는 TabView기반 어플리케이션을 만들어 보았습니다~!

오늘은 지난 번에 다음 번에 얘기 해 보자고 한 이미지에 대해 얘기해 보려 합니다...ㅎㅎ

자 이제 본론으로 고고 ^^

# 어플리케이션 Icon관리하기

지난번에 만들어 놓았던 MyFirstTabbedApp을 이용해 볼까 합니다~

그 전에 아이콘 파일들에 대해 좀 살펴봐야 할 것 같아요~
제가 미리 만들어본 아이콘 파일들입니다.


이게 다 뭐냐구요?ㅋㅋ
설명해 드릴게요.
아이콘 안에 들어가 있는 숫자들은 아이콘 이미지의 크기입니다.
29 x 29  부터 114 x 114까지 다양하지요?
지금부터 설명 들어갑니다~!

 파일명 사이즈  용도 
Icon.png  57 * 57 
iPod 터치 3세대 이하
iPhone3GS 이하 
디스플레이의 홈화면 아이콘
Icon@2x.png 114 * 114 
iPod 터치 4세대 이상
iPhone4 이상 Retina 
디스플레이용 홈화면 아이콘 
Icon-72.png  72 * 72
iPad 및 iPad2
홈화면 아이콘 
Icon-Small.png   29 * 29
iPod 터치 3세대 이하
iPhone3GS 이하
스포트라이트용 아이콘 
Icon-Small@2x.png 58 * 58 
iPod 터치 4 이상
iPhone4 이상 Retina
스포트라이트용 아이콘 
Icon-Small-50.png   50 * 50
iPad 및 iPad2
스포트라이트용 아이콘 

조금 감이 오시나요?
아이콘 종류가 뭐가 이렇게 많냐구요?
기기별로 지원 해상도와 화면 크기가 다르기 때문이죠~
아, 그런데 물론 기본아이콘인 Icon.png하나만 넣어도 모든 기기에서 똑같은 아이콘을 볼 수 있긴 하지만 기기별로 아이콘이 약간 뭉그러져 보이거나 깨끗해 보이지 않을 수 있기 때문에 분리해서 넣어주는 거예요.
분리해서 안넣어준다고 쇠고랑 차지 않아요~
그냥 안이뻐 보이면 안좋으니까 하는거예요~
ㅋㅋㅋㅋㅋㅋㅋ

아, 또 스포트라이트가 뭐냐구요?
iOS의 기능 중에 하나인데, 홈화면에서 왼쪽으로 쭈욱 끝까지 화면 이동하면 검색하는 화면이 나올거예요.
거기가 스포트라이트 검색창입니다.
기기에 있는 모든 정보들을 검색할 수 있는 곳이죠.
그 목록에는 조금 작은 아이콘을 넣어놓으면 이미지 로딩 속도가 더 빠르기 때문에 스포트라이트용 아이콘을 따로 넣는 건데요, 사실~ 이것도 굳이 넣어주지 않아도 됩니다.

하지만 그냥 유저들을 위한 깨알같은 서비스?ㅋㅋㅋ
여튼 이렇게 여러 크기의 아이콘을 만드는 이유를 조금 이해하시나요?

제가 먼저 만든 아이콘은 파일 첨부 해 두었습니다^^


그럼 이 아이콘들을 직접 어플에 적용시켜 봅시다.

지난 번에 만들었던 어플을 다시 한 번 실행시켜 봅시다^^* (아, 물론 그냥 비어있는 어플 만드셔도 상관없습니다~)
 

일단 아이콘 이미지들을 넣어 줄 그룹을 생성했구요~


아이콘 파일들을 끌어다 넣어줍니다.
가져올때 복사에 체크 해 주시는거 잊지 마시구요~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@190B50334ECCA5A6301C13.png%7Cwidth=%22500%22%20height=%22343%22%20alt=%22%22%20filename=%222.png%22%20filemime=%22image/jpeg%22%7C_##]
 총 6개가 되겠죠?ㅎ

그런데... 이렇게 여섯개나 되는 파일을 일일히 저장하기 귀찮죠...ㅠㅠ
그런 분들을 위한 어플이 존재합니다~
Mac App Store에 가셔서 iConify라는 어플리케이션을 받아 설치하시면 한방에 모두 해결해 드립니다 ㅎㅎㅎ

iConify

또는 Icon Express를 이용하세요~

Icon Express


네비게이션 영역에서 MyFirstTabbedApp-Info.plist 파일을 찾아 클릭해 봅시다.
새로 프로젝트를 만드신 분들께서는 <ProjectName>-Info.plist 의 형식으로 자동생성이 되어있을거예요.
plist파일은 Property list 파일입니다. 즉, 속성값들을 갖고 있는 파일입니다.
지금 선택된 이 plist파일은 이 어플리케이션의 속성과 설정 값들을 저장하고 있는 파일이라고 생각하시면 됩니다~!
잘 보시면 Icon files라는 행이 보이실거예요.
오른쪽에 보시면 0 items라고 써있는게 보이구요~


우리는 6개를 넣어줄거니까요~
Icon files 좌측에 보시면 화살표가 보이는데, 아래로 향하도록 한번 클릭해 주시고~
Icon files라는 행이 파란색으로 표시되어 있는 상태에서 엔터 한번 눌러주시면 아래 item 0 이라는 행이 하나 생길거예요~
여섯 행을 만들어 줍시다.
그리고 아이콘 파일들의 이름을 쭈욱 적어줍니다~! (대소문자 구별 합니다)


그리고 실행시켜 볼까요?
시뮬레이터에서 보니 아이콘에 57 x 57 이라고 보이시죠?
제가 Icon.png 파일에 57 x 57 이라고 적어놓았으니 이렇게 나올거예요~
그런데, 시뮬레이터 화면은 분명히 아이폰4 모양인데 왜 57 아이콘이 나올까요?ㅠㅠ


자, 시뮬레이터는 기본적으로 레티나 디스플레이가 아닌 기기로 설정이 되어있습니다.
시뮬레이터 실행 중에 상단에 메뉴표시줄에서 Hardware-Device-iPhone(Retina)를 선택하여 레티나 화면으로 변경하여 봅시다.


짜잔~ 아이폰4 이상에서 지원되는 레티나 화면에서는 114 아이콘 (Icon@2x.png)가 정상적으로 나오네요~


그럼 디바이스를 아이패드로 바꾸면? 
짜잔~ 72 아이콘이 나와욬ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
아 신기해랔ㅋㅋㅋㅋㅋㅋㅋㅋ


그런데, 나는 아이콘에 발광 효과를 넣지 않았는데 여기는 자동으로 나와요~
없애고 싶으신 분들을 위하여 방법을 알려드립니다~
다시 plist파일로 돌아와서 공백에 대고 마우스 오른쪽 클릭!
또는 컨트롤+클릭 하시면 메뉴가 나오는데요
Add Row를 클릭합니다~


그러면 새로 한 줄이 나오는데요, Key라는 열의 내용을 Icon already includes gloss effects라고 입력하여 하시고 (아마 자동완성으로 나올거예요) Value는 YES를 써주시구요~(대소문자 구별합니다)


다시 실행하여 봅니다~
엄허~! 뽀송뽀송 글로시 효과가 사라졌어용 ㅋㅋㅋ


근데 아이콘 밑에 보이는 어플이름을 좀 바꾸고 싶다면...??
plist파일에 보면 Bundle display name 이라는 행에서 Value를 자신이 원하는 이름으로 바꿔주시면 됩니다. 한글 영문 상관없습니다. 다만 ...이 생기지 않으려면 한글6글자, 영문 12자까지만 써주시면 됩니다.(띄어쓰기는 영문 1글자로 취급됩니다)


자~ 이렇게 어플 아이콘 아래의 이름이 변경되었습니다~!
나라별로 지정 가능합니다. 이를 로컬라이제이션이라고 하는데, 그 부분에 대해서는 다음에 다루도록 해 볼게요..ㅎㅎ



# 해상도별 이미지 관리

아이폰에는 두 가지 해상도가 존재합니다.
320*480과 640*960.
꼭 두배 차이나죠?
그렇기 때문에 높은 해상도의 화면과 낮은 해상도의 이미지 화면의 이미지의 선명도도 다릅니다.
기본적으로 어떤 크기의 이미지던간에 기기별로 알아서 리사이징을 해 주어 같은 이미지를 출력하도록 해주지만, 그렇게 하면 리사이징 처리 시간도 걸리게 되고, 기기에 최적화된 이미지가 아니기 때문에 선명하지 못하거나 뭉그러져 보일 수 있습니다.
그래서 깨끗한 화면을 원하는 개발자는 해상도별로 이미지도 따로 관리를 해주게 되는데요~
그것에 대해 간략한 설명 드리겠습니다~
지난 번에 집어 넣었던 yagom_icon.png라는 이미지 파일이 있습니다.
아이콘 파일이 아닙니다... 혼동을 드려 죄송합니다 (ㅠ_ㅠ)
여튼, 이 파일의 이미지 크기와 꼭 2배가 되는 이미지를 yagom_icon@2x.png라는 이름으로 집어 넣어줍니다.
.


그리고 실행해 봅시다.
retina디스플레이가 아닌 일반 화면(320*480) 버전의 기기를 통하여 yagom_icon.png라는 파일을 사용하였던 화면을 보면 전에 봤던 것과 동일한 이미지가 나옵니다.


하지만 레티나 디스플레이로 변경한 후 다시 보게된다면!?



어머나 세상에!
전 단지 @2x라는 접미어만 붙여서 파일을 넣어줬을 뿐인데 알아서 찾아서 보여주네요~ 


이렇게나 친철하게 말입니다 ㅋㅋㅋ


그래서 아이패드로도 실행 해 보았습니다.
그런데...
아이패드에서 아이폰 어플을 실행하였을 때에는 @2x가 아닌 일반 이미지를 로딩하는군요.
이 이유에 대해서는 논란이 많은데, 구글링 해보시면 조금이나마 이유를 알 수 있으실 거예요..^^
정확한 사실도 아니거니와 설명하기 복잡하여 일단 패스 합니다 ㅎㅎㅎ


자 이렇게 해서 아이콘 넣어보기와 이미지 관리에 대해 조금 알아보았습니다~
협업하시는 디자이너 분께 이렇게 저렇게 이미지를 처리해 주세요~ 라고 말씀하시면서 이유를 설명해 주세요~ㅎㅎ
이미지가 더 이뻐보이려고 이렇게 한다고 말씀드리면 마다하는 디자이너분은 없으실 거예요ㅋㅋ
그런데~!
더 편하게 하는 방법을 소개해 드립니다~!
맥 앱스토어에서 Unretiner 검색하시면 나옵니다..^^
레티나 디스플레이 기준의 이미지를 넣으면 이미지 뒤의 @2x라는 접미어를 없애는 동시에 크기를 절반으로 줄여서 따로 저장해 줍니다~
그러면 일반 이미지와 레티나 이미지를 한방에 해결할 수 있죠^^
다만, 사이즈가 111x123과 같이 홀수가 되는 파일은 처리가 되질 않으니 112x124와 같이 이미지 크기를 조정하셔서 넣어주셔야 합니다^^
링크는요~ Unretiner


후아~
이렇게 아이콘과 이미지에 대해 조금 알아보았습니다^^
어떠세요?
유익하셨나요?
별거 아닌 내용인 것 같아도 나중에 다 피가되고 살이되는 내용일겁니다 ㅎㅎ
유익하셨다거나 도움이 되셨다면 응원이나 질책의 댓글 하나씩 남겨주세요 ㅠㅠ 넙죽넙죽
저는 그럼 다음번에 조금 더 유익한 내용으로 찾아뵙겠습니다~^^*

다음에 뭐 할까요? 댓글 주세요 ㅎㅎ
 

by yagom


p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.


RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 옥탑방원숭이S 2012.03.03 21:05  댓글주소  수정/삭제  댓글쓰기

    이번 내용도 잘 보았습니다 ^_^
    아이콘 설정은 꼭 알아야 할 중요한 내용 같네요!
    중간에 알려주신 아이콘 등록 앱은
    일일이 설정으로 잡을 걸 알아서 파일 옮기면 해주는 건가요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.05 10:13 신고  댓글주소  수정/삭제

      폭풍같은 댓글 감사드립니다~!

      중간에 소개해 드린 앱들은 저렇게 많은 아이콘 파일들을 일일히 다른이름으로 저장하는 불편함을 덜어주기 위하여 가장 큰 해상도인 114*114 해상도의 아이콘만 만들어서 이 앱에 넣어 주시면 이름별로 스스로 정리해서 뱉어주는 녀석입니다~^^*

  2. 한이 2012.03.16 00:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.
    중간중간에 유틸 소개 정말 도움이 되었습니다. ㅎㅎㅎㅎㅎㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.03.16 10:02 신고  댓글주소  수정/삭제

      찾아주셔서 감사합니다^^
      도움이 되셨다니 행복하네요~
      필요하거나 궁금한 것이 있으면 언제든 말씀주세요^^

  3. 여맹이 2012.03.26 14:01  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다!!!

    이제 입문인데 많이 배워가네요.^^

  4. 리현 2012.07.21 07:42  댓글주소  수정/삭제  댓글쓰기

    잘보고있습니다. 지금 따라 해보는데욤. 저는 plist 에서 아이콘 파일 리스트가 안나와요 ㅁ흠 ㅠㅠ 왜ㅡ일까요?

  5. 초보kay 2012.07.23 19:11  댓글주소  수정/삭제  댓글쓰기

    잘 보고있습니다.
    plist 파일에서 icon files의 아이템이름을 임의로 주었더니 실행시 어플의 아이콘이 생기지 않습니다.
    아이콘파일이름은 야곰님이 이용하신 이름으로 고정되였고 그래야 콤파일러가 인식을 하는건지요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.07.23 21:02 신고  댓글주소  수정/삭제

      임의로 아이콘 이름을 설정해도 그에 맞는 아이콘이 있다면 구동이 될 것 입니다.
      대소문자도 구분을 하구요~ 확장자도 넣어주어야 합니다.
      png형태로 넣어주시는 것이 좋구요.
      그리고 그래도 아이콘이 안나온다면 Build-Clean 한 후 다시 빌드해 보시기 바랍니다.
      빌드클린 단축키는 Command+Shift+K 입니다~
      그럼 잘 해결되시면 좋겠네요 ㅎ

  6. 초보kay 2012.07.23 23:00  댓글주소  수정/삭제  댓글쓰기

    아, 제가 plist 에 파일 확장자를 써넣지 않았댔군요.
    답글 감사합니다.
    저는 현재 시뮬레이터상에서 테스트를 해보고 있습니다.
    본래 아이콘이미지파일을 지우고 새 아이콘파일을 복사해서 넣었고
    또 Build-Clean도 해 주었는데 실행하면 아이콘그림이 바뀌지 않고 지워진 이미지가 계속 나와서요.
    시뮬레이터에 이미 설치된 앱의 정보가 남아있는것 같은데 무슨 방도가 없을가요? ㅠ ㅠ ㅠ

  7. neoaero 2012.07.26 10:38  댓글주소  수정/삭제  댓글쓰기

    전 아이콘파일 해상도는 57*57만 있는줄 알았는데..이런 기능이 있는줄 몰랐네요..
    감사합니다.

  8. chosamong 2012.08.24 14:07  댓글주소  수정/삭제  댓글쓰기

    정말로 피가 되고 살이 되는 내용이네요.
    마음을 담아서 감사의 인사를 드립니다.
    꾸벅 <(__)>

  9. alison 2012.09.10 18:01  댓글주소  수정/삭제  댓글쓰기

    왜...
    위에것 그대로 따라했는데 어떤 버젼에석너 114짜리 해상도 아이콘으로만나올까요..;;;
    엑스코드 4.4.1, 시뮬레이터 5.1 쓰고 있는데 뭔가 다른건가요??

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.10.03 21:43 신고  댓글주소  수정/삭제

      만약에 그렇게 나온다고 하면 Xcode에서 빌드클린(커맨드+K)을 해 보시고 시뮬레이터 안에서 어플리케이션을 삭제하고 다시 한 번 해보세요~

  10. 루감 2012.11.22 08:37  댓글주소  수정/삭제  댓글쓰기

    감사히 잘 배웠습니다.
    근데.. 질문이 .. xcode나 시뮬레이터등 캡쳐는 어떻게 하신건가요?
    창 뒤쪽 그림자까지도 캡쳐되어 있네요.. 신기합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.22 10:20 신고  댓글주소  수정/삭제

      안녕하세요 루감님 :)
      덧글 고맙습니다 ㅎ
      Command + Shift + 4 누르신 후에 화면이 바뀌면 Space 눌러주세요 ㅎ 그럼 창 캡쳐가 됩니다.
      추가로 Command + Shift + 3을 누르시면 전체 화면 캡쳐구요 ㅎ
      Command + Shift + 4를 누르고 원하는 영역 드래그 하시면 영역 캡쳐입니다.

      이미지는 데스크탑에 저장됩니다 ㅎ

    • 루감 2012.11.23 08:13  댓글주소  수정/삭제

      와우.. space에 비밀이 있었군요.. 상상도 못했네요. ㅎㅎ
      무한한 정보 정말 감사합니다.

  11. 딴또 2013.03.07 08:31  댓글주소  수정/삭제  댓글쓰기

    진짜 최고의 명강의 입니다. 감사합니다.

  12. 2013.03.12 18:16  댓글주소  수정/삭제  댓글쓰기

    우왕! 깨알같네여! 요즘은 바쁘신지 포스팅을 미루시는 듯...?. 실망이네여 흥쳇퉷

  13. yimcold 2014.04.09 09:34  댓글주소  수정/삭제  댓글쓰기

    대박이네요 ㅋㅋ 항상 야곰님 블로그에서 많이 얻고갑니다!

  14. yimcold 2014.04.09 09:34  댓글주소  수정/삭제  댓글쓰기

    대박이네요 ㅋㅋ 항상 야곰님 블로그에서 많이 얻고갑니다!

오늘의 주제

1.Tab View 기반 어플리케이션 만들어보기

아홉 번째 시간입니다.

지난번에는 아이폰 화면에 이미지를 띄워 보았습니다~!

오늘은 약간 응용하여 탭뷰를 만들어 봅시다...ㅎㅎ

자 이제 본론으로 고고 ^^

# MyFirstTabbedApp

지난 번 이미지 띄운 것을 조금 응용해 볼게요~
일단 뭘 시작하려면 프로젝트를 하나 생성해야 겠지요?
이제 프로젝트 정도는 혼자 생성할 줄 아셔야 해요~ㅋㅋ
잘 모르시면 지난 포스팅 한 번 보시고~
참고로 새 프로젝트 만들기 단축키는 커맨드+Shift+N입니다.
이번에는 Tabbed Application 템플릿을 이용해 보겠습니다~


이번 프로젝트명은 MyFirstTabbedApp입니다~!


기본 세팅 해 주시구요~


일단 무작정 실행시켜 봅시다 ㅋㅋ
커맨드 + R
우왕ㅋ 그냥 잘 되네용ㅋㅋㅋ


이것저것 눌러봅시다~
아래 탭 눌러서 화면전화 해봐용~


자.. 이제 본격적으로 초큼 바꿔 보도록 하겠습니다~!
우리 지난번에 썼던 이미지들 한 번 다시 끌어와 볼까요?
짜잔~ 다시 두 이미지 끌어와 봤습니다~


좌측 네비게이션 영역에서 FirstViewController.xib 파일을 클릭하여 아래 IB화면으로 이동합니다.
이미지 뷰 하나를 끌어 넣어서 자신이 가져온 이미지를 화면에 넣어줍시다~


SecondViewController.xib에서도 마찬가지로 이미지를 넣어줍니다~!


그리고 또 한번 실행 ㅋㅋ
커맨드 + R 
어휴~ 이렇게 이쁘게 또 나왔네요 ㅋ


하..지..만... 탭이 두개밖에 없으니 쓸쓸해 보이지 않나요?
탭을 하나 더 추가해 봅시다~!
프로젝트 폴더에서 오른쪽 버튼을 누르고 New File 클릭!
또는, 커맨드+N 입니다!

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile3.uf@1831363F4ECA0F7A04B227.png%7Cwidth=%22500%22%20height=%22339%22%20alt=%22%22%20filename=%2211.png%22%20filemime=%22image/jpeg%22%7C_##]
아래 그림처럼 새 파일 템플릿이 나오면 UIViewController subclass 를 선택합니다.
이말인 즉슨 새로운 뷰 컨트롤러 녀석을 하나 생성하겠단 뜻이겠죠?
[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile1.uf@1131363F4ECA0F7C052651.png%7Cwidth=%22500%22%20height=%22352%22%20alt=%22%22%20filename=%2212.png%22%20filemime=%22image/jpeg%22%7C_##]
Class명은 ThirdViewController 입니다.
subclass of 에는 UIViewController 라고 기입해 줍니다.
UIViewController에서 상속받는 ThirdViewController라는 클래스를 생성한다는 뜻입니다.


이렇게 파일이 저장될 위치를 설정해 준 후(그냥 기본적으로 잘 되어있으니 바꾸지 않으셔도 됩니다) Create !!


짜잔~ 네비게이션 영역에 보면 파일들이 생성이 됩니다.
보기좋게 위치정렬 해주시고~ ThirdViewController.xib파일을 클릭해 줍니다.


저는 이미지 하나와 Label하나를 집어 넣어 보았습니다~
마음껏 하나 꾸며보세요 ㅎ


그리고 실행 해 봅시다~!
커맨드 + R
어...? 그런데 왜 세번째 탭이 안생겼죠? 


당연히 프로그램은 우리가 말해주지 않으면 모릅니다...ㅋㅋㅋ
프로그램에게 새 뷰컨트롤러를 만들어 줬고, 거기에 넣고 싶다고 말해줍시다.
우선 AppDelegate.m이라는 파일로 가 봅시다.
AppDelegate라는 녀석은 어플리케이션 전체를 총괄 관리하는 녀석이라고 생각해 주시면 됩니다.
긴 설명은 차후에 하도록 하고, 일단 코드를 봅시다..!
드디어 코드..!? 두둥!
겁먹지 마세요~ㅋㅋ
아주 간단하게 할거예요.


복사 붙여넣기 신공을 펼쳐 봅시다.
화면에서
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
라는 메소드로 이동해 봅시다.
이게 뭐냐구요? 메소드가 뭐냐구요?
뭐... 다음에 설명합니다 ㅋㅋㅋ
뭐 이런 날림이 다 있어 하지만 걱정마세요ㅋㅋㅋ
거기서 viewController2에 해당하는 줄을 복사해서 아래줄에 붙여 넣어 봅시다.
뭔가 뻘건게 눈에 띕니다.
뭐가 불만이냐...?
Redefinition of 'viewController2' 라고 나오네요.
같은 이름이 중복선언 되었다고 나와요~
이 세계에서는 이름이 같으면 안되나 봅니다.


그래서 이름을 살짝 바꿔줍니다. viewController3로 바꿔주시구요~
안에 적혀있는 [SecondViewController alloc ]도 ThirdViewController alloc으로.. 뒤에 @"SecondViewController"도 @"ThirdViewController"로 변경해줍니다.
여튼 화면에 보이는 것처럼 바꿔주세요 ㅋㅋ
그런데도 빨간놈이 안없어진다구요?
예... 안없어집니다. 코드 상단에 보면 #import라는 녀석이 보일텐데요, 이녀석도 한 줄 추가해 줍니다. 화면에 보이는 것처럼요~
import는 말 그대로 데려오는건데요~
여기서 이 클래스를 사용하겠다는 의미입니다.
우리가 어렵사리(?) 만들어 놓은 ThirdViewController 클래스를 데려와줍니다 ㅋ

그러고 나서도 뭔가 누런게 우리보고 지껄입니다...
viewController3 라는 녀석이 쓰이지 않았다는 waring 메세지 입니다.
왜 만들어놓고 쓰지 않느냐는 뜻입니다.
우리가 탭에 새로 만든 녀석을 넣어줘야 하므로...
아래에 
self.tabBarController.viewControllers에 우리가 만든 녀석을 살포시 하나 더 넣어줍니다.


그러면 이렇게 말끔한 화면이 탄생할거예요~
두구두구두구두...
실행해 봅시다~!


우왕 ㅋ 새탭이 나타났어요~


 그런데 새로만든 탭에 아무것도 없어요..ㅠㅠ

화면은 나오는데 탭에 이름도.. 그림도 없네요!!
넣어봐 주어야 겠지요?

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile24.uf@20185C344ECA137A1193AF.png%7Cwidth=%22396%22%20height=%22744%22%20alt=%22%22%20filename=%2223.png%22%20filemime=%22image/jpeg%22%7C_##]
탭에 넣어줄 이미지를 가져와 줍니다.
투명 바탕을 사용하는 이미지여야 해요~!
png파일로 가져와야 해요.ㅎ
그런데 여기서 파일을 보면 제가 star.png와 star@2x.png 두개를 가져왔지요?
그냥 이름은 아이폰 3GS이하의 기종에서 지원하는 이미지, @2x를 붙이는 것은 아이폰4 이상의 기종(현재 기준)을 지원하는 이미지 입니다.
사실 iOS는 기종별로 지원하는 해상도가 다르기 때문에 좀 더 깨끗한 이미지를 원한다면 좀 더 높은 해상도의 이미지를 넣어주어야 한답니다.
하지만 굳이 그럴 필요없이 고해상도 이미지만 넣어도 큰 무리는 없습니다.
다만 좀 더 느린 사양의 기기에서 구동속도가 조금 느려지는 정도!?
어떻게 하시든간에 선택은 자신의 몫입니다.
저는 그냥 주로 아이폰4 기준의 이미지를 넣는 편입니다.
하나의 이미지만 넣어도 어플 내에서 알아서 인식하고 이미지 크기나 해상도 조절을 합니다.
하나의 이미지만 넣고 싶으면 @2x등을 붙일 필요없이 지난번에 넣었던 것처럼 이미지를 그냥 끌어다 넣으면 됩니다~

일단 제가 이번에 넣은 이미지는 star.png가 30*30의 크기, star@2x.png는 60*60의 크기를 갖습니다. 딱 2배 크기예요~ @2x는 두배 크기라는 말씀..^^

추가된 2개의 파일은 첨부파일로 올려놓았습니다.
여튼 두 파일을 끌어다 놓습니다~



[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile7.uf@12185C344ECA137B120EA8.png%7Cwidth=%22500%22%20height=%22352%22%20alt=%22%22%20filename=%2224.png%22%20filemime=%22image/jpeg%22%7C_##]
그리고 FirstViewController.m 파일로 와서 빨간색으로 표시된 영역의 두줄을 복사해둡시다.


그리고 우리가 만든 세번째 뷰컨트롤러 ThirdViewController.m에 와서 붙여넣고 아래 스크린샷처럼 내용을 살짝 바꿔줍시다~!


그리고 에러가 없다면 실행-!!
짜잔~!
드디어 나왔네요 ㅋㅋㅋ 이름과 그림 ㅋㅋ 


후아후아~
여기까지 잘 따라오셨나요?
다음에는 무슨 이야기를 해볼까요?
사실 여기서 다음에 다음에 한다~
이렇게 써놓은거...
귀찮아서 그런거 절대 아닙니다 ㅋㅋㅋ
여기서 쓰면 한도없이 길어져서 따로 챕터를 만들까 하는데, 먼저 필요한 부분 댓글로 남겨주시면 하루이틀 내로 포스팅 해드릴게요~
소통에 게을리 하지 않겠습니다 ㅋㅋㅋ
 
그럼 다음에 뵙도록해요~!



by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.


RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. 루감 2012.11.21 12:21  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    지난주부터 시작해서 덕분에 잘 배우고 있습니다. 쉽게 설명해주셔서 따라하기만 하면 되더군요.
    근데 드디어 진행이 안되고 막혔네요.
    xcode 4.5.2 사용하고 있는데요. (iOS SDK 6.0 입니다.)
    이 글의 UIViewController를 추가를 위해 New File 메뉴를 선택하니..
    화면이 틀려요.
    Choose a options for your new file: 이라는 그림과 같은 창이 아니고요.
    Choose a template for your new file: 이라는 이름의 창이 뜨고, iOS, OSX 두가지 범주에서
    Cocoa Touch, C and C++, User Interface 등 여러가지 항목과 그 하위에 수많은 클래스들을
    선택할 수 있게 되있네요..
    다 눌러봐도 UIViewController 또는 그와 비슷한것도 찾을수가 없네요.
    뭘 선택해서 추가해야 하나요?

  3. Lisa 2012.11.22 12:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요. 야곰님의 블로그에서 많은 정보를 얻고 열심히 아이폰 개발을 하고 있는 초짜 인데요.
    질문을 좀 몇가지만 드리려고 합니다.

    참고로 Xcode 4.5.2, 스토리보드X, xib View - Bottom Bar 로 Tab Bar 형태로 개발하고 있습니다.

    1. A뷰콘트롤러에는 여러개의 버튼들이 있습니다. 그리고 하단에는 Tab Bar 가 있어서 A, B, C... 순서대로 탭바 내용이 보이게 됩니다. 그리고 그 버튼들은 각 B, C... 뷰콘트롤러로 이동할 예정입니다.
    그런데 A -> B 로 화면전환 할때
    SecondViewController *secondModal = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 초기화를 한 후
    [self presentViewController:secondModal animated:YES completion:nil]; 모달뷰 형태로 지정해서 실행하면 Tab Bar는 보이지 않은 상태에서 View 내용이 보이게 됩니다. 그렇다고 [self.view addSubview:secondModal.view]; 형태로는 현재 뷰 위에 얹혀서 보이는 식으로 나타나게 됩니다. (이 부분은 당연한 부분이겠죠.)

    해서 제가 원하는 결과는 A뷰컨트롤러에서 B, C....뷰컨트롤러로 화면전환이 이동되면서 Tab Bar가 보이고 Tab Bar Item도 각 Tab 위치에 맞는 활성화된 상태로 보이도록 하는것이 목표입니다.

    2. FifthViewController에는 툴바가 있고 네비게이션바는 없는 상태입니다. 해당 뷰안에 버튼이 있는데 이 버튼을 누르게 되면
    SixthViewControlller 로 화면전환 하려 합니다. 그런데 SixthViewController 에서는 툴바는 설정 안해놨습니다. 네비게이션바와 Back 버튼이 보이고 클릭하면 FifthViewController 로 돌아가고 싶습니다. 가능한지요?

    아직 실력이 미흡해 제대로 설명을 못드린것 같아 죄송합니다.

    염치불구하지만 답변 기다릴게요 ^^;;

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.11.22 13:06 신고  댓글주소  수정/삭제

      안녕하세요 Lisa님! 반갑습니다 :)
      1번의 경우에는 모달은 원래 그런 용도(새로운 화면으로 덮어버리는...)이기 때문에 원하는 기능에 적절하지 않은 것 같습니다. 네비게이션 컨트롤러를 이용하는 것이 좋을 것 같습니다.

      2번의 경우에는 이동할 때마다 네비게이션 컨트롤러의 setNavigationBarHidden: 메소드로 보였다 가렷다 하면 될 것 같습니다~ :)

      도움이 될지 모르겠습니다. ^^;

  4. Lisa 2012.11.23 16:25  댓글주소  수정/삭제  댓글쓰기

    답변 달아주셔서 감사합니다.

    기존 작업들 다 엎고 모달로 불러올 수 있도록 재작업중에 있습니다. ㅡ.ㅜ
    제대로 된 교육도 안받고 기초도 없는 상태에서 사정상 개발부터 하려니 참... 힘드네요. ㅠㅠ

    아무쪼록 또 궁금한 사항 생기면 여쭤봅도록 하겠습니다.

    주말 잘 보내세요 ^^

  5. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.03 22:16  댓글주소  수정/삭제  댓글쓰기

    또 고맙습니다.
    저도 블로거로써 이 고마움을 어찌 전해야할지 모르겠네요. :)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.01.04 07:46 신고  댓글주소  수정/삭제

      까만거북이님 :)
      저도 거북이님 블로그 보면서 많은 정보 얻어갑니다 ㅎㅎ
      유용한 팁과 정보들이 정말 많네요 ㅎ

  6. 첼로와 짜짜 2013.01.11 17:21  댓글주소  수정/삭제  댓글쓰기

    ㅋㅋㅋㅋㅋㅋ 탭바에 이미지 넣는거 좀 헤매다가 결국 알아냈어요. 끝까지 다 볼겁니다. 정말 도움이 많이되요. 감사합니다.
    탭 4개 만들었어요ㅋㅋㅋㅋ

  7. 딴또 2013.03.07 08:11  댓글주소  수정/삭제  댓글쓰기

    명강의 감사합니다.

  8. Favicon of http://keepingstar.tistory.com BlogIcon keepingstar 2013.03.30 13:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 야(한)곰님~
    따라하기로 하고 있는데 이상하게 이미지뷰를 집어넣은 곳과
    시뮬레이터로 실행시킨 후의 위치가 틀리네요-?

    지금 제가 6.0을 사용하고있는데 이것의 버그일까요?
    흠..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.03.31 00:08 신고  댓글주소  수정/삭제

      야한곰은 절대로 아니구요...ㅠㅠ
      일단 탭뷰안에 들어가서 위치가 달라보일 수도 있고
      뷰가 오토 리사이징이 되어서 그럴 수도 있을 것 같습니다..

  9. 청담동개발자 2013.04.15 16:36  댓글주소  수정/삭제  댓글쓰기

    안녕하세요~ 궁금한거 하나만 물어볼께요

    Tabbed Application을 이용하면 FirstViewController ,SecondViewController 라고 이름이 정해지는데

    이름을 바꿀 수 없나요? 이름 바꿨더니..오류나고 실행이 안되네여..

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.04.16 09:53 신고  댓글주소  수정/삭제

      당연히 바꿀 수 있습니다... ^^;
      어디서 어떤 이름을 바꾸셨는지 모르겠지만...
      파일이름을 변경하고 싶으시면 파일이름 변경 후에 #import에서도 바꿔주셔야 하구요...
      클래스 이름을 바꿔주셨으면 xib에서도 클래스 정보를 바꿔주셔야 합니다...

  10. 질문돌이 2013.06.08 15:59  댓글주소  수정/삭제  댓글쓰기

    제가 뭘 잘 몰라서 그런데요,
    탭바에 view controller를 등록하기 전에

    UIViewController *viewController1 = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil];

    이런식으로 UIViewController instance를 만드는데,
    막상 생성하는건 FirstViewController instance네요.

    이래도 되는건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.06.09 14:43 신고  댓글주소  수정/삭제

      제가 잘못 표현한 부분입니다 ^^;
      FirstViewController와 SecondViewController 포인터로 선언해 주는것이 더 맞겠습니다 ㅎㅎ

  11. 개개개발의 귀태랑 2013.07.01 17:39  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좋은 강의 잘 보고 있습니다.

    한가지 궁금한 점이 있는데요. 이번 강좌를 다 따라했고, run실행 시 오류도 없었습니다.
    그런데 시뮬레이션 화면에서 세번째 탭( star이미지도 잘 뜹니다)을 누르기만 하면 시뮬레이터가 멈춰 버리는데요.;

    이건... 어떤 문제인지 알 수 있을까요?

    xcode는 4.6.2버전입니다~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.02 10:02 신고  댓글주소  수정/삭제

      글쎄요...^^;

      그렇게만 말씀해 주시면 저도 뭐라고 답변을 드려야 할지 잘 모르겠습니다 ㅠ_ㅠ

    • 개개개의 귀태랑 2013.07.02 10:54  댓글주소  수정/삭제

      아... 어디가 잘못되었는지를 모르니 질문을 상세하게 드릴 수가 없네요.ㅠㅠ

      디버그 네비게이터에

      int main(int argc, char *argv[])
      {
      @autoreleasepool {
      return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); <--Thread 1: signal SIGABAT
      }
      }

      이라고 나옵니다. 댓글 중에도 몇분이 SIGABAT얘기를 하시는 것 같은데 무슨 말인지 모르겠네요.ㅜㅜ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.02 11:29 신고  댓글주소  수정/삭제

      난감한 상황이 아닐 수 없습니다..ㅠ_ㅠ

      메모리에 잘못 접근하고 있는 것 같은데, AppDelegate쪽에 오타나 잘못 입력한 부분이 있는지 확인해 보시고, ThirdViewController의 xib파일에 문제가 없는지 확인해 보시는 것도 좋을 것 같습니다. 'ㅁ'

  12. 개개개의 귀태랑 2013.07.02 17:23  댓글주소  수정/삭제  댓글쓰기

    해결했습니다.ㅎㅎ;

    탭을 새로 추가하는 부분에 문제가 있었습니다. 본문에는 New File을 하고 템플릿에서 UIViewController subclass를 선택하면 된다고 되어 있습니다만, 저 같은 경우 그런 템플릿을 못찾아서;; 그냥 템플릿 라이브러리에서 만들어 썼던 게 문제였던 것 같습니다.

    제 xcode에서는 new file을 한 뒤 'ios' --> 'cocoa touch' --> 'objective-c class'를 선택해 줘야 'UIViewController subclass'를 선택할 수 있었습니다.

    아무튼 이제 나머지 부분을 따라갈 수 있겠네요~~ 감쏴함다~~ㅎ

  13. sunju 2013.07.30 11:54  댓글주소  수정/삭제  댓글쓰기

    혹시 두번째 tab에 안녕하세요이런 문자열을 저장해 놓구 첫번째 tab에서 읽어 올수 있는 방법은 없나요??? 블로거님 delegate 부분 보구 해봣는데 안되네요 ㅠㅠ 도와주세요~ㅠㅠ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.30 12:02 신고  댓글주소  수정/삭제

      안녕하세요 선주님!! :)
      어떤식으로 저장하셨고, 어떤 식으로 델리게이트 연결을 하셔서 구현을 하셨는지에 대한 정확한 설명과 코드 없이는 제가 도와드릴 수 있는 부분이 없을 것 같아요...^^
      어떤 부분이 어떻게 동작을 안하는지 직접 쉽게 설명할 수 있는 정도로 자신의 코드를 이해해서 설명해 보셔요. 아마 그때 쯤이면 스스로 원하는 기능을 완성하셨을 거예요.
      그럼에도 불구하고 원하는 기능이 동작하지 않는다면, 이해한 내용을 저에게 다시 설명해 주세요. 함께 방법을 찾아보아요 :)

  14. sunju 2013.07.30 13:22  댓글주소  수정/삭제  댓글쓰기

    답변감사합니다
    아직 해결이 안되서 또 물어볼게요 ㅠㅠ
    두번째 tab view에 uislider 만들고 viewDidDisappear에서[self.delegate returnValue...] 이런식으로 코딩하고 첫번째 tabview에서 returnvalue란 함수를 통해서 값을 읽어오구 싶은데 우선 첫번째 setDelegate을 어디부분에서 해야될지 막막합니다. viewDidload에서 setDelegate을 했더니 returnvalue 함수가 호출도 되지 않네요...ㅜㅜ 설명이 제대로 됬는지는 잘모르겠네요 ㅠㅠ 감사합니다.

    • Favicon of https://blog.yagom.net BlogIcon yagom 2013.07.30 13:28 신고  댓글주소  수정/삭제

      탭바에서는 viewDidDisappear가 호출이 안될텐데, 로그 찍어보셨나요?
      viewDidDisappear말고 다른 방법으로 해당 메소드를 호출해줘 보세요.
      가령 예를 들어 버튼을 누른다던지, 첫 번째 탭에서 다른 방법으로 불러오는 방식이라던지요... ^^

  15. Hide 2013.11.05 19:57  댓글주소  수정/삭제  댓글쓰기

    감사합니다. ~

  16. 무숙자 2013.12.16 22:18  댓글주소  수정/삭제  댓글쓰기

    설명 최고네요 최고....감탄을 하고 갑니다.
    저같이 일반인도 이해가 가다니요

  17. Bart 2014.02.04 22:43  댓글주소  수정/삭제  댓글쓰기

    요즘 맥을 시작하는 초보사용자로 야곰님 강좌를 처음부터 따라하기 시작한 사람입니다

    저는 xcode5.0.2 사용 중인데, 프로젝트 생성할때 storyborad 선택이 없어서 메소드 부분이 없어서 막히고 있는데요,
    혹시 다른 해결 방안은 없는지요?

  18. myonug 2014.05.21 19:56  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    좋은 강좌 감사합니다.!
    그때 한번 댓글 달았는데 빠른 답변도 정말 감사드리고요^^

    궁금한점이 있습니다.
    혹시 title의 사이즈를 좀더 키울 수 없을까요?
    키울수 있다면 어떤 방법으로 키워야 되나요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.05.21 20:38 신고  댓글주소  수정/삭제

      http://goo.gl/BE1tCF
      한 번 참고해 보셔요 :)
      제가 지금 문서를 안봐서 모르겠지만 아마 iOS 6 이상에서부터 사용할 수 있는 메소드일거예요 ㅎㅎ

  19. myonug 2014.06.10 15:59  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 벌써 세번째 댓글을 다는거 같습니다.
    항상 답변해주셔서 감사해요!

    탭뷰를 하면서 5페이지를 만들었어요.. 근데 1245페이지는 버튼을 눌렀을때 지정해준 뷰로 이동을 하는
    일반적인 탭뷰형식입니다. 3번째 위치한 탭뷰버튼을 눌르면 마지막으로 보여진 뷰는 유지되면서
    그위에 버튼을 구현을 할려고 하는데 혹시 조언이나.. 검색을 어떻게 하면 되는지 가르쳐주실수 잇나요..ㅠㅠ
    머라고 검색을 해야되는지.. 잘 몰라서 물어봅니다!

    0
    0
    탭뷰: 1 2 3 4 5

    탭뷰 3번째를 클릭했을때 0이라는 버튼이 그위에 구현되는 방식입니다.


    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.06.11 16:43 신고  댓글주소  수정/삭제

      안녕하세요 :)
      UITabBarControllerDelegate 에 대해서 알아보시면 될 것 같아요 :)
      탭바를 눌렀을 때 호출되는 델리게이트 메소드가 있을거예요 ㅎ

  20. 2014.11.13 18:06  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  21. 루나 2016.01.02 15:11  댓글주소  수정/삭제  댓글쓰기

    포스팅이 2011년으로 오래되긴 했지만 너무 자세히 설명해 주셔서 차근 차근 따라하고 있습니다.
    Xcode 7.2를 사용해서 배우는 중인데 지금은 ViewController Class 파일을 만들지 않고 Object에서 ViewController를 추가하여 오른쪽 버튼으로 연결하게 변경이 된거 같아요. 코딩 필요 없이요. 그래서 게시글과 달라 조금 헤맸습니다. ㅎㅎㅎ
    시뮬레이터로 띄워봤을 때 3번째 탭이 나타납니다.
    다만 정말 초보기에 질문드리는데... 이렇게 Object로 ViewController를 연결하면 첫번째, 두번째 탭처럼 h, m 파일이 생성되지 않아서 궁금합니다. 제가 Xcode 최신 버전을 사용해서 다른 걸까요? 아님 제가 뭘 잘못한 걸까요?

    새해 복 많이 받으세요. :)

    • Favicon of https://blog.yagom.net BlogIcon yagom 2016.01.09 03:01 신고  댓글주소  수정/삭제

      안녕하세요 루나님~!
      음... 그것은 기본적으로 UIViewController 클래스의 객체를 스토리보드에서 자동으로 생성해주기 때문입니다. 쉽게 말로 풀어쓰기가 정말 어려운데... 음...ㅠㅠ
      스토리보드의 ViewController 객체를 스토리보드에 올려놓으면 코드로 UIViewController를 생성해주는 것과 같은 효과를 얻게됩니다. 컴파일 할 때 자동으로 스토리보드를 분석해서 Xcode가 대신 코딩해주는 효과라고 할까나요?
      지금 위에서처럼 UIViewController 클래스를 상속받는 클래스 두 개를 더 만든 후에 스토리보드에 올린 UIViewController 객체를 선택하시고 Identity inspector 메뉴(참고 : https://goo.gl/UwdTx4)에서 Class 이름을 우리가 만들어준 클래스 이름으로 지정해주면 위에서 해본 예제랑 같은 효과를 얻어보실 수 있습니다 :)

      말로 최대한 풀어 써보려고 했는데 잘 이해가 되실지는 모르겠어요ㅠ

      더 궁금하신 사항이 있으면 또 글 남겨주세요~!


오늘의 주제

1. iOS Application의 화면구조
2. View Controller
3. 화면에 보이지 않는 Object 종류 알아보기

일곱 번째 시간입니다.

지난번에는 Object에 대하여 조금 알아보았습니다~

오늘은 iOS App의 화면구조와 아직 배우지 못한 몇몇 객체들에 대해 알아봅시다...ㅎㅎ

자 이제 본론으로 고고 ^^

# iOS Application의 화면구조

우리가 iOS를 사용할 때 보이는 화면구조에 대해서 조금 먼저 알아볼 필요가 있겠습니다.
일단 최고로 상위에 있는 녀석이 UIWindow입니다.
지난 번에 설명드렸듯이 iOS는 하나의 윈도우창으로 이루어져 있습니다. 즉 하나의 화면 안에서 모든 것들이 이루어지는것이라는 말이죠. 즉, 컴퓨터로 생각해 보면 하나의 모니터가 있고, 그 모니터 안에 여러개의 창을 띄워놓고 작업하지요? 그것과 같습니다.
한 화면 안에서 여러개의 창을 띄워놓을 수 있습니다.
그 하나하나의 창을 우리는 View로 표현 할 수 있습니다.
헷갈리시나요?
일단 아래의 그림을 봅시다.
하나의 UIWindow안에 View가 여러개 존재하여 보여질 수 있습니다.
View가 각자의 영역을 가지고 보여질 수도 있고, 곂쳐져 보여질 수도 있습니다.
이래도 솔직히 감이 안옵니다 ㅎㅎ
또 아래의 그림으로 가봅시다.


[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile2.uf@131957454EBAB4AE1F41BC.png%7Cwidth=%22500%22%20height=%22750%22%20alt=%22%22%20filename=%222.png%22%20filemime=%22image/jpeg%22%7C_##]

실질적인 어플리케이션의 화면입니다.
화면 최상단에는 Status Bar, 즉 상태바가 있지요.
상태바를 보여줄지 안보여줄지는 개발자의 선택입니다.
일단 이 어플리케이션에는 상태바가 보이네요.
상태바도 하나의 뷰로 생각할 수 있습니다.
우리는 상태바를 보이게 할지 안보이게 할지, 또 상태바의 스타일은 어떤식으로 표현할지 등을 정할 수 있습니다. 
화면에 보면 일단 메인뷰(UIView)가 존재하고 메인뷰 크기만큼의  이미지뷰(UIImageView)가 존재합니다. 이미지뷰로 배경화면을 깔아 놓았고 그 위에 버튼들로 구성된 화면입니다.
버튼(UIButton)도 View의 종류중에 하나입니다. 화면에 보이는 거의 모든것이 View에서 상속받은 것인데요, 상속이라는 것은 뭐 일단을 설명하지 않겠습니다.ㅎㅎ
지금 보다시피 지금 이 화면(UIWindow)에는 하나의 뷰(UIView)위에 이미지뷰(UIImageView)하나가 얹어져 있고, 버튼(UIButton) 5개로 이루어진 윈도우입니다.
위에 설명이 잘 이해가 안가시면... 지난 번 포스팅을 한 번 더 보고 오시는것은 어떨까요?ㅎ
 


아래 화면을 보시면 하나의 윈도우 위에 상태바가 존재하고 메인 뷰 위에 배경을 씌운 이미지 뷰 하나, 그위에 여러 View들로 이루어져 있습니다.
사용자의 선택을 받기 위한 버튼들, 제목표시를 위한 라벨, 입력받기 위한 텍스트필드와 텍스트뷰가 존재합니다. 지난 번에 설명해 드린 것을 참고하시면 어떤 역할을 하는지 대충 감이 오시겠죠?ㅎ


이렇게 화면에 많은 뷰들로 구성이 되어있는데 이 많은 뷰들을 어떻게 관리를 해 줄 것인가??
그런 생각이 드실거예요. 뷰들이 화면에 어떤 모양으로 보여지게 될지는 뷰 자체적으로 결정을 합니다. 하지만 사용자의 입력을 받거나 사용자의 행동에 따라 화면을 어떻게 바꿔줄지 또는 어떤 동작을 하는지는 Controller라는 녀석이 결정을 하게 됩니다.
헷갈리기 시작하시는 모습이 눈에 선합니다 ㅎㅎ
컨트롤러라는 녀석들은 화면에 보이질 않는 추상적인 녀석들이니까요..^^
그럼 거기에 대해서 조금 더 알아볼까요?

# View Controller

이제 컨트롤러 중에서 가장 많이 보게 될 View Controller에 대하여 알아봅니다.
일단 iOS의 동작이 어떤 순서로 이르어 지는지 먼저 살펴봅시다.


iOS는  MVC모델을 기반으로 합니다.
Model - View - Contorller 의 준말입니다.뭐 무슨말인지는 나
중에 이해하게 되실거예요~

Model은 데이터를 저장하는 곳, View는 화면에 보이는 것, Controller는 View와 Model을 관리하는 객체라고 보시면 됩니다.
무슨말인지 잘 감이 안잡히시죠? 괜찮습니다~
어쨋든 Controller라는 녀석이 대부분의 모든것을 주관한다라고 생각해 두세요.
그리고 View Controller는 화면에서 일어나는 것들의 처리를 맡아서 처리한다고 생각하시면 되겠지요?
즉, 컨트롤러들은 일처리를 열심히 하는 일꾼이고, 뷰들은 컨트롤러가 쏴주는 명령과 데이터로 화면에 보여주는 아바타 꼭두각시들입니다. ㅎㅎ
정리가 좀 되실라나요?


# 화면에 보이지 않는 Object 종류 알아보기
그럼 이제까지 화면에 보이는 녀석들을 좀 봤으니 화면에 보이지 않는 녀석들과 컨트롤러 들에 대하여 한 번 알아보도록해요~
 

이름 : Tap Gesture Recognizer
설명 : 화면에 직접적으로 보이지는 않지만 앱 내부에서 열심히 동작하는 녀석들 중에 하나가 Recognizer 녀석들입니다. Recognize하면 알아차리다 라는 뜻이죠? 말 그대로 Tap, 즉 우리가 터치하는 것들을 알아차리고 프로그램에 전달하는 녀석입니다. 이녀석이 사용자가 어디를 탭했다 또는 몇 손가락으로 터치를 했다 라고 전달해 주면 어플이 그에 알맞는 동작을 할 수 있게되는거죠^^ 이녀석은 Recognizer중에 화면을 터치하는 것을 감지해 주는 녀석입니다.
클래스 : UITapGestureRecognizer

이름 : Pinch Gesture Recognizer
설명 : Pinch 하면 집게죠 ㅎ 즉, 손가락을 집게처럼 오므리거나 벌리는 동작을 말합니다. 화면을 확대 축소 할때 주로 쓰이는 동작이죠? 그 동작을 사용자가 하면 시스템에 알려주는 역할을 합니다.
클래스 : UIPinchGestureRecognizer

이름 : Rotation Gesture Recognizer
설명 : 손가락으로 동그랗게 돌리는 것을 인식하여 시스템에 전달해 주는 역할을 합니다.
클래스 : UIRotationGestureRecognizer


이름 : Swipe Gesture Recognizer
설명 : Swipe하면 쓸어내다 이런 뜻이죠. 화면을 쓸어내듯이 미는 동작을 감지합니다. 밀어서 잠금해제 뭐 이런 동작이요 ㅎ
클래스 : UISwipeGestureRecognizer


이름 : Pan Gesture Recognizer
설명 : 쉽게말해서 드래그 하는 동작을 잡아냅니다 ㅎ
클래스 : UIPanGestureRecognizer


이름 : Long Press Gesture Recognizer
설명 : 말그대로 길~~~~~~~~게 누르고 있는 동작을 인식하여 시스템에 알려줍니다~!
클래스 : UILongPressGestureRecognizer


이름 : Object
설명 : 이녀석이 우리가 말하는 객체의 원형이라고 볼 수 있겠네요. 인터페이스 빌더에서 사용할 수 없는 커스텀 객체를 구성 할 수 있습니다.
클래스 : NSObject


이름 : External Object
설명 : 문서 외부에서 끌어오는 객체를 위한 Placeholder, 즉 자리를 차지하게 해주는 인터페이스 빌더의 요소입니다.
클래스 : 


이름 : View Controller
설명 : 드디어 뷰컨트롤러네요 ㅎㅎ 이녀석이 뷰에서 일어나는 일들을 감지하고 어떤 동작을 하고 어떤 변화를 줄지 결정하고 수행하는 역할을 하는 녀석입니다. 아까도 말씀드렸죠? 뷰는 꼭두각시 아바타일 뿐, 요녀석이 조종사입니다 ㅎㅎ
클래스 : UIViewController


이름 : Table View Controller
설명 : iOS보면 목록들을 쭈욱 나열할 수 있는 테이블을 볼 수 있습니다. 사실 테이블이라고 하면 잘 감이 안오시겠지만, 아이폰 설정에 들어가면 설정 메뉴 목록이 섹션별로 나뉘어서 쭈욱 목록이 나오는 것이 테이블입니다. 그 테이블 화면에 나올 것들과 테이블 열(Row)를 눌렀을 때 어디로 이동하게 될지 정해주는 역할을 해요~
클래스 : UITableViewController


이름 : Navigation Controller
설명 : iOS화면 상단에 보면 제목과 뒤로가기버튼, 메뉴 버튼 등이 존재하는 바가 존재하지요? 그것을 네비게이션 바 라고 지난번에 설명을 드렸는데, 그녀석이 뒤로가기 버튼이나 메뉴 버튼을 눌렀을 때 어떤 동작을 취할지 명령을 내리는 컨트롤러 입니다. 아이폰 설정화면 상단에 보면 네비게이션 바가 있지요^^
클래스 : UINavigationController


이름 : Tab Bar Controller
설명 : 탭바를 통제하는 녀석입니다. 그 유명한 카카오톡 화면 아래에 보면 메뉴들을 보여주는 탭바가 존재하지요? 그 탭바를 눌렀을 때 어떻게 동작을 하게될지 결정하는 녀석입니다.
클래스 : UITabBarController


이름 : Page View Controller
설명 : iPad에서만 동작하는 녀석입니다. 말그대로 페이지처럼 동작하는 뷰들을 관리합니다.
클래스 : UIPageViewController

이름 : Search Bar and Search Display Controller
설명 : 아이폰에서 검색할 때 쓰이는 검색바와 그 검색 결과창에 어떤 것을 검색해서 표현해 줄지 결정하고 명령하는 녀석입니다.
클래스 : UISearchDisplayController


이름 : GLKit View Controller
설명 : 지난 번에 설명드렸던 GLKView를 관리하는 녀석입니다. 3D 사용을 위한 Open GL ES를 사용하는 뷰에 대한 조종을 합니다.
클래스 : GLKViewController


 이렇게 해서 IB의 Library에서 볼 수 있는 객체들에 대해 알아보았는데요, 사실 객체의 종류는 수도 없이 많습니다. IB에서 볼 수 있는 객체들은 일부에 불과해요..^^
화면에 보이지 않는 객체들은 수도 없이 많습니다.
하지만 걱정하지 마세요~
저와 함께 차근차근 신나게 알아보도록 해요~
일단 지난번과 이번에 본 것들은 아~ 이런것들이 있구나 하는 정도로 알아두시고 (물론 다 기억하시면 시야가 넓어지는 좋은 일이 생기지요..^^) 이후에 진행되는 내용들에서 잘 기억이 나지 않거나 이해가 가지 않는 부분이 생기면 돌아와서 한 번쯤 돌아보시는 것도 좋을 것 같아요.

오늘은 iOS화면구성과 iOS 동작에 대한 내용 아주 초큼, 그리고 화면에 보이지 않는 객체들을 일부분 살펴보았습니다.

혹시나 올바르지 못한 내용을 발견한 고수분들은 의견주세요^^*

다음에는 무엇을 해볼까요?ㅎ
이 블로그의 주인은 여러분들입니다. 여러분들이 해보고 싶은 것들을 댓글로 말씀해 주시면 준비해 보도록 하겠습니다^*^

이론만 하기는 너무 힘드시죠?ㅎ
다음 번에는 한 번 실전에 들어가 보도록 할까 합니다~
고된 여행을 떠날 준비가 되셨나요?ㅎ

다음에 뵙도록 해요^~^
 


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 말썽쩡 2011.12.12 19:46  댓글주소  수정/삭제  댓글쓰기

    감사해요 막막했는데 이렇게 설명을 잘해주시다니 ㅋㅋ 잘봤어요 ^^

  2. 옥탑방원순이S 2012.03.03 09:58  댓글주소  수정/삭제  댓글쓰기

    진짜 신나게 읽었습니다.
    다음번 실전도 너무 재밌을 것 같아요 ^_^
    정리해서 책으로 내셔도 될 것 같아요~~~
    잘 봤습니다 ^_^

  3. 블루아빠넹 2012.04.20 09:13  댓글주소  수정/삭제  댓글쓰기

    정말 잘 보고 있습니다.
    친절한 포스팅 너무 감사하구요.
    앞으로도 꾸준한 포스팅 부탁드려요~!!

  4. 봇짱 2012.06.17 19:51  댓글주소  수정/삭제  댓글쓰기

    쉬운 설명 감사합니다.
    정말 잘 보고 갑니다.

  5. 자몽주스 2012.06.25 13:40  댓글주소  수정/삭제  댓글쓰기

    이제야 아이콘들이 어떤기능들을 하는지 알것 같아요 정말감사합니다.

  6. SODA 2012.06.27 16:13  댓글주소  수정/삭제  댓글쓰기

    죄송한데 IB가 무엇을 말하는 건가요?

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.06.27 17:21 신고  댓글주소  수정/삭제

      google에서 Xcode IB라고 검색하시면 제가 답변해 드리는 것 보다 훨씬 속시원한 답을 얻으실 수 있을 것 같아요 ^^*

  7. 딴또 2013.03.06 08:43  댓글주소  수정/삭제  댓글쓰기

    좋은 강의 정말 감사합니다.

  8. ios 개발자 될놈.. 2013.05.08 19:04  댓글주소  수정/삭제  댓글쓰기

    야곰님 앞으로도 쭉,!!

  9. ryan 2014.06.17 09:38  댓글주소  수정/삭제  댓글쓰기

    아 글 너무 잘 읽고 있습니다. 안드로이드를 조금 만지다가 Swift 가 나왔다고해서 이참에 iOS도 배우고 있는 중인데요. 설명을 너무 잘 해주셨네요. Swift 에 관련된 강좌는 하실 계획이 없으신지요? :)

  10. 동기 2017.03.17 14:55  댓글주소  수정/삭제  댓글쓰기

    책을 안 사서 무작정 하고 있는데 이런 좋은 글들 때문에 서점이 망하지 않을까 우려가 되네요...ㅎㅎㅎ 감사합니다 잘 보고 있습니다!! 댓글을 웬만해선 귀찮아서 안 다는데 너무 감사해서 댓글 달고 갑니다 ㅎㅎ

    • Favicon of https://blog.yagom.net BlogIcon yagom 2017.03.17 16:05 신고  댓글주소  수정/삭제

      안녕하세요 동기님!
      덧글 고맙습니다 :) 너무 예전 자료라 많이 도움이 될지는 잘 모르겠습니다^^; 종종 들러주세요~

  11. 김성욱 2017.03.28 10:36  댓글주소  수정/삭제  댓글쓰기

    잘 봐씁니다. 감사합니다.


오늘의 주제

1. Object란??
2. 화면에 보이는 Object 종류 알아보기

여섯 번째 시간입니다.

지난번에는 Xcode를 한 번 살펴보았습니다~

오늘은 일단 화면에 보이는 녀석들이 무엇인지 한 번 파악해 봅시다..ㅎㅎ

자 이제 본론으로 고고 ^^
 

우리는 iOS프로그래밍(Cocoa Touch)을 할 때 Objective-C를 사용합니다.

물론, C나 C++등을 이용하여 프로그래밍도 가능하지만, 기본적으로 Objective-C를 사용하여 코딩한다고 생각합시다.

Objective-C는 '객체지향언어'입니다.

객체지향언어는 객체지향 프로그래밍을 지향하는데요...

아.. 처음 보는 분들은 도무지 무슨말인지, 뭔소린지 도통 모르시겠죠?ㅎㅎ

사실, 모든 것을 시작을 할 때 기초를 탄탄히 다지고 하는것도 좋지만 전 지금 여러분들이 프로그래밍에 대한 지식이 전무하다고 생각을 하고 진행해 볼 생각입니다.

일단, 머리아프게 생각하지 맙시다..ㅎㅎ

지금 기초부터 정말 탄탄히 다지고 싶은분들은..

객체지향언어, 객체지향 프로그래밍, Objective-C, 객체, 인스턴스, 메소드, 클래스에 대해서 역사부터 차근차근 공부하고 오시길 바랍니다. 그러면 조금 더 이해가 잘 갈 수도 있어요^^

하.지.만...

공부하고 되돌아 오시는 분들은 그렇게 많지 않을 것 같네요.ㅎㅎ

하다가 분명히 지칠 것 같아요^^..

그냥 간단간단하게 알아두고 차근차근 한 번 생각하며 나가 봅시다~

일단 저만 믿고 와보시라니까요^^~
아, 그리고 Cocoa Touch가 무엇이냐구요? 구글 검색 한 번 해보시길...^^ 크게 중요한 것이 아니라 여기서는 넘어가겠습니다~ 그냥 우리가 배우고 있는게 Cocoa Touch구나~ 정도 알아두시면 되겠습니다~ 


# Object란??

오브젝트라는 것이 무엇일까요?
아..!! 그 전에 미리 말씀드리는데, 지금 보이는 이 챕터의 원론적인 이야기들은 정 이해가 가지 않으신다면 일단 스킵하셔도 큰 무리가 없습니다. 나중에 다음거 보다가 이해가 안되시면 다시 돌아와서 보실일도 많을 거라 생각합니다. 그만큼 처음엔 굉장히 헷갈리는 부분이거든요..^^

다시 돌아와서 Object란..? 
한글로 하면 객체입니다.

그렇다면 객체란 무엇일까요??
우리는 객체를 '내 차(My Car)'라고 생각해 봅시다.
여기석 클래스라는 녀석도 등장을 하는데, 클래스는 공장의 '생산라인'이라고 생각합시다.
공장의 생산라인에서는 똑같이 생긴 차량을 우리가 필요한 만큼 만들어 냅니다. 
이것이 클래스와 객체간의 관계입니다.


그림에서 보는 것과 같이..(발로그려서 죄송...ㅋㅋ) 생산라인에서 똑같이 생긴 자동차를 뽑아냅니다. 하지만 차량마다 번호가 다르고 탑승하는 사람도 제각각입니다. 이처럼 클래스는 어떠한 객체가 가지는 특정 모양에 대한 내용을 담고 있습니다. 그리고 객체는 찍혀나온 녀석이고, 우리는 그 안에 객체마다 클래스 형식에 맞춰 내가 원하는 내용들을 채워 넣을 수 있습니다.
다른 방법으로 표현하면 클래스는 붕어빵을 찍어내는 쇠로된 틀이고, 오브젝트는 그 틀에서 찍혀나오는 붕어빵으로도 비유할 수 있겠습니다. 또한, 붕어빵에 넣어주는 앙금에 따라 팥앙금을 가지는 붕어빵이 될 수도, 피자맛 붕어빵이 될 수도 있죠. 겉모양은 같은데 말예요^^
 
조금 이해가 가시나요? 이해가 지금 당장 가지 않으셔도 좋습니다~!
그냥 읽어두세요!!
걱정하실 필요 없구요~ 서서히 시간이 지나고 가끔씩 제가 클래스니 변수니 이런말을 무의식중에 할 때 마다 한 번씩 와서 다시 봐주세요^^ 이해가 잘 안가시면 구글에서 검색해 보시면 도움이 되는 자료들이 많을 거예요~
 
그리고 인스턴스(Instance) 또는 인스턴스변수라는 이름도 종종 보게 되실텐데요, 이녀석은 다름이 아니라 객체를 지칭하는 말입니다. 인스턴스 = 객체라고 생각하시면 됩니다.
 
그럼 여기서 대충 클래스, 객체(인스턴스)의 관계에 대하여 알아보았습니다. 책에서 보면 원론적인 내용들이 굉장히 많아서 헷갈리는 경우도 많고, 요거만 보다가 지쳐 쓰러지는 경우도 있으니.. 일단 여기서 잠시 접어둡시다~ 사실 이게 다예요^^;

정 더 궁금하시다면... 대충 흝어보고 오세요~
http://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D
http://ko.wikipedia.org/wiki/%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8B%B0%EB%B8%8C-C
http://www.webdoor.org/xe/135
http://kldp.org/node/108983
별 내용은 없을거예요~

서론이 너무 길었네요..^^
객체지향언어는 왜 사용하는지, Objective-C는 왜 C랑 다른지... 등등은 C를 배우지 않으신 분들이 아니라면 굳이 여기서 설명해 드릴 필요는 없을 것 같아요^^
다음 번 정도에 객체지향언어의 특징과 왜 객체를 사용하는지 정도에 대해서 간략히 설명해 드릴게요. (만약 제가 깜빡하고 안하면 댓글 남겨주세요..ㅎㅎ)


# 화면에 보이는 Object들 알아보기 
 
사실.. 오늘 이것만 하려고 했는데, Object에 대한 설명이 필요할 것 같아서 위에 아주 장황하게 써놓았네요..ㅋㅋㅋ
자, 본래의 목적으로 돌아왔습니다~
우리가 iOS기기들의 화면에 보이는 녀석들을 한 번 알아봅시다.
참, 이곳에서는 iOS5 기준으로 설명하겠습니다.
때에따라서는 iOS5 미만의 버전들에서 없는 것이 추가로 생긴것도, 있던것들이 없어진 것도 있으시 참고하세요^^

이름 : Page Control
설명 : 아이폰 홈 화면에서도 보이죠? 말그대로 페이지를 이동할 때 마다 페이지 상태를 보여주는 역할을 합니다. 또한 양 옆을 터치해주면 페이지가 넘어가는 역할도 하죠^^
클래스 : UIPageControl

이름 : Stepper
설명 : iOS5 부터 지원되는 녀석입니다. 생긴것만 봐도 아시겠죠? 값을 증감시킬 수 있는 버튼입니다~
클래스 : UIStepper

이름 : Table View
설명 : 말 그대로 테이블(표) 뷰 입니다. 뷰라는 것이 무엇인가요..?? 흠... 컴퓨터 화면에서 보이는 하나의 윈도우창이라고 생각하시면 될 듯 합니다. 일단 자세한 설명은 다음번에^^
클래스 : UITableView

이름 : Table View Cell
설명 : 테이블뷰 셀입니다. 말 그대로 테이블뷰의 기본적인 셀이 아니라 자신이 셀 모양을 직접적으로 만들어주고 싶을 때 사용하게 됩니다.
클래스 : UITableViewCell

이름 : Image View
설명 : View중에서도 이미지를 보여줄 수 있는 View입니다.
클래스 : UIImageView

이름 : Text View
설명 : View중에서 주로 장문의 텍스트를 볼 수 있도록 해주는 녀석입니다. 사용자들에게 수정, 편집, 복사권 등을 허용 또는 불허 할 수 있습니다.
클래스 : UITextView

이름 : Web View
설명 : View중에서 웹사이트 화면을 직접 보여줄 수 있습니다.
클래스 : UIWebView

이름 : Map View
설명 : 설명을 안해도 아시겠죠? 우리가 보는 지도 화면입니다..^^
클래스 : UIMapView

이름 : Scroll View
설명 : 위아래로 스크롤 할 수 있는 화면입니다. 그냥 View는 스크롤이 안돼요^^~ 눈치 빠른 분들은 눈치채셨겠지만, Text View는 Scroll View안에 글자들이 들어가 있는 것이라고 보셔도 무방합니다~
클래스 : UIScrollView

이름 : Date Picker
설명 : 날짜를 선택할 수 있게 만들어 놓은 녀석입니다
클래스 : UIDatePicker

이름 : Label
설명 : 사용자에게 텍스트를 보여줄 때 사용합니다. 여러줄을 나타낼 수 있지만 TextView처럼 스크롤은 불가능 합니다. 또한 사용자가 수정, 편집, 복사 등을 할 수 없습니다. 즉, 보여주기만 가능하다는 말씀!
클래스 : UILabel

이름 : Picker View
설명 : 뺑그르르 돌면서 선택할 수 있게해주는 그 녀석 아시죠?^^
클래스 : UIPickerView

이름 : Ad BannerView
설명 : iAd라는 iOS전용 광고를 사용할 때 사용하는 광고 배너창입니다~ 여기에 관해서는 나~중에 한 번 설명할 기회가 있다면 설명해 보겠습니다
클래스 : ADBannerView

이름 : GLKit View
설명 : OpenGL ES를 포합하는 뷰입니다.  3D관련 모듈을 iOS에서 보다 편리하게 사용하기 위해 만들어진 녀석인데요 iOS5에서 새로 선보였습니다.
클래스 : GLKView

이름 :Round Rect Button
설명 : 우리가 아이폰에서 자주 볼 수 있는 둥그스름한 버튼입니다~ 사실 이 모양 말고도 다른 모양으로 변환도 가능합니다~ 기본적으로 제공되는 버튼들이 많아요~
클래스 : UIButton


이름 : View
설명 : 위에서 소개해 드렸죠? 컴퓨터의 한 화면(창)이라고 보시면 될 듯 합니다. 자세한 설명은 다음 시간에^^
클래스 : UIView

이름 : Window
설명 : 영어 설명을 보시면 화면에 표시된 뷰를 관리하고 꾸미는 역할이라고 정의되는데, 뭐... 딱히 신경쓰지 않아도 될 녀석입니다. iOS에서는 하나의 윈도우가 기본적으로 밑바탕에 깔리게 되며, 하나의 윈도우 안에서 많은 뷰들로 화면이 보이게 됩니다. 사실 윈도우는 사용자에게 부각되거나 보이진 않는 부분이라는게 맞을 것 같기도 하네요~
클래스 : UIWindow

이름 : Navigation Bar
설명 : 익숙한 녀석일 거예요~ 화면에서 위에 Back버튼 보이면서 왔다갔다 할 수 있게 하는 상단의 바 아시죠? 그녀석입니다~
클래스 : UINavigationBar

이름 : Segmented Control
설명 : 사용자에게 몇 개 중 하나를 택일하게 할 때 쓰이는 버튼입니다. 대충 그림보면 답 나오죠?^^ 이것도 버튼과 마찬가지로 몇가지 형태가 존재합니다~ 사실 대부분의 View들은 속성을 조절하면 다양한 형태의 모습이 됩니다~ 마치 내 차에 스티커를 붙이거나 새로 도색을 하는 것 처럼요^^
클래스 : UISegmentedControl

이름 : Navigation Item
설명 : Navigation Bar에 들어가는 내용들을 총칭하여 Navigation Item이라고 합니다. 좌측 또는 우측버튼, 바 제목 등이 Navigation Item에 속합니다.
클래스 : UINavigationItem

이름 : Search Bar
설명 : 이 또한 굳이 설명하지 않아도..^^ 검색할 때 보이는 그 검색 바 입니다.
클래스 : UISearchBar


이름 : Tool Bar
설명 : 화면 상단 또는 하단 등에 바 형태로 여러개의 버튼들을 넣어 기능을 수행할 수 있게 만든 녀석입니다.
클래스 : UIToolBar

이름 : Bar Button Item
설명 : 툴바에 들어가는 아이템들을 총칭합니다. 네비게이션 아이템에도 포함됩니다.
클래스 : UIBarButtonItem

이름 : Fixed Space Bar Button Item
설명 : 화면상에 바 버튼 아이템들 사이에 정해진 간격만큼의 간격을 주는 녀석입니다. 실제로 점선은 보이지 않아요~
클래스 : 클래스 없음

이름 : Flexible Space Bar Button Item
설명 : 위에 있는 녀석은 고정 넓이라면, 이 녀석은 버튼들 사이를 균등한 간격으로 띄워주는 역할을 합니다~
클래스 : 클래스 없음

이름 : Tab Bar
설명 : 카카오톡에 보면 아래에 메뉴처럼 화면 옮겨 다닐 수 있게 몇개의 버튼들을 나열해 놓은 바 같은 곳이 있죠? 그곳이 탭바 입니다.
클래스 : UITabBar

이름 : Tab Bar Item
설명 : 말 그대로 탭바에 들어가는 아이템들을 총칭합니다..^^
클래스 : UITabBarItem

이름 : Text Field
설명 : 사용자에게 텍스트를 입력받을 수 있는 필드입니다.
클래스 : UITextField

이름 : Slider
설명 : 설정창에 음량조절, 화면밝기조절 등에 보면 많이 보이죠? 뭐 그런 역할 주로 합니다
클래스 : UISlider

이름 : Switch
설명 : 설정창에 보면 On/Off설정 하는 녀석 보이죠? 그 녀석입니다~
클래스 : UISwitch

이름 : Activity Indicator View
설명 : 여기 캡쳐에서는 잘 보이지 않지만... 대기 화면에서 뱅글뱅글 돌아가는 녀석 아시죠? 날 자꾸 기다리며 설레게 하는 그 녀석...ㅋㅋㅋ 그녀석을 Activity Indicator 라고 합니다. 인터넷 사용중에 화면 상단 Status Bar에서 돌아가는 작은 녀석은 Network Indicator라고 불러요~
클래스 : UIActivityIndicator

이름 : Progress View
설명 : 말 그대로 현재 진행상황을 보여줄 때 주로 쓰입니다. 주우우욱 차오를 때 마다 설레는 그 기분^~^
클래스 : UIProgressView


후아~
넘넘 길어요!! 
진이 쭉쭉 빠지네요...^^
열심히 한 만큼 많은 도움과 참고가 되었으면 좋겠네요~
지나가는 고수분 께서는 혹여 제가 실수한 부분이 있다면 지적 부탁드릴게요~
저도 사람인지라 방대한 양을 하려니 지치고 헷갈리는 부분도 더러 있네요~^^;
참..!! 그리고 여기 있는 설명이 부족하면 Xcode실행하셔서 Object Library에서 객체들 위에 살포시 얹어 놓고 기다리시면 도움말이 보일거예요~ 
아래 그림처럼요..^^



자, 그럼 오늘은 여기까지 해 보구요~
다음 번에는 iOS화면들이 어떤 관계에 있는지, 그리고 화면에 보이지 않는 객체들에는 어떠어떠한 것들이 있는지 1~2번에 걸쳐서 얘기해 보도록 할게요.
그리고 그 다음 번에는 객체지향에 관한 얘기를 조금 이어서 해 볼게요 :-)
그럼 모두 다음에 보아요~^^ 


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기 


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

Posted by yagom

댓글을 달아 주세요

  1. 무한도전 2012.01.11 09:10  댓글주소  수정/삭제  댓글쓰기

    설명 정말 쉽고 재밌게 잘 해주셨네요. 잊어버릴만한 내용들도 다시 떠오르고, 모르는 부분도 이해되구요. 잘 봤습니다. 감사해요~!!

  2. 옥탑방원순이S 2012.03.03 09:48  댓글주소  수정/삭제  댓글쓰기

    한번에 정리된 자료들로 보니 훨씬 이해가 쉽습니다. ^_^ 다음 강의로 더 정진!!!

  3. 나이마흔에앱만들기 2012.04.23 03:17  댓글주소  수정/삭제  댓글쓰기

    엊그제 시작했는데, 객체 붕어빵, 클래스 붕어빵틀에서 확 와닿는데요. 부지런히 배울께요. 배워서 남주셔서 감사합니다.

  4. 오싹이 2012.04.25 07:57  댓글주소  수정/삭제  댓글쓰기

     와~~~ 언제 이렇게 다 준비하셨나요!!!
    너무 고생이 많았겠습니다....
    너무 감사 드립니다.
    아이폰 개발 공부하려고 여기저기 찾다가 여기왔는데... 너무 정리가 잘 되어 있네요....
    열심히 공부하겠습니다.
    의욕이 생깁니다....

    • Favicon of https://blog.yagom.net BlogIcon yagom 2012.04.25 10:54 신고  댓글주소  수정/삭제

      도움이 되신다니 저도 기분이 좋습니다~^^
      시간이 되신다면 추천도 꽝꽝 박아주세요 ㅎㅎㅎ
      자주 놀러오세요~^^

  5. vip0331 2012.05.14 15:19  댓글주소  수정/삭제  댓글쓰기

    이렇게 보니 막 정리되는 기분이네요.
    많은양 만드시느라 수고하셨습니다.
    감사합니다. ㅎㅎ

  6. Favicon of https://rakubaru.tistory.com BlogIcon 산책고냥이 2012.06.26 09:54 신고  댓글주소  수정/삭제  댓글쓰기

    깔꼼하고 보기 쉽게 설명해주셔서 머리에 쏙쏙 들어와요!!

  7. Lewis6 2012.10.25 17:01  댓글주소  수정/삭제  댓글쓰기

    진심 감사드립니다~~!

    입문자를 배려한 강좌 정말 감동이네요 ㅎㅎ

  8. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.03 19:43  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다! :)

  9. 딴또 2013.03.06 07:38  댓글주소  수정/삭제  댓글쓰기

    번거롭고 힘든 작업을 정말 멋지게 하셨습니다. 감사합니다.

  10. 찰리 2013.12.30 15:25  댓글주소  수정/삭제  댓글쓰기

    정말 감사합니다. 잘 봤습니다.

오늘의 주제

1. Xcode 둘러보기


다섯 번째 시간입니다.
지난번에는  iTunes Connect에 연락처, 은행, 세금정보들을 등록해 보았습니다~
오늘은 개발에 쓰게될 Xcode를 본격적으로 살짝 열어 봅시다..ㅎㅎ
자 이제 본론으로 고고 ^^


# Xcode안녕??
지난 번에 아무 생각없이 그냥 말도안되는 앱 하나 만들어 보았습니다.
이제는 기초를 슬슬 쌓아 보아야 겠지요?
하지만, 체력만 좋고 전술만 좋다고 전쟁에서 이기진 않죠?
무기 다룰줄도 알아야 합니다..ㅎ
우리가 앞으로 매일매일 보아야 할 Xcode라는 녀석을 한 번 뜯어보도록 하죠.
Xcode실행!!
실행 못하시는 분은 없으리라 믿고..ㅋㅋ

지난 번에 지나가면서 보여드렸던 화면입니다.
Xcode화면구성을 간략히 보여주고 있는데요, 제가 부연설명을 쬐끔 하겠습니다..^^




각자 버튼들을 누르면 화면이 어떻게 변하고 어떤 동작을 하는지 스크린샷은 찍지 않았습니다.
감히 아뢰온데, 여러분들께서 직접 눌러보셨으면 합니다.

<1> 종료, 최소화, 확대
MS Windows와는 반대죠? 빨간놈이 종료, 노란놈이 최소화, 초록색놈이 확대입니다. 눌러보세요~

<2> 실행, 정지
어플리케이션 또는 테스트 단위.. 등등을 실행할 수 있는 버튼과 중지 하는 버튼입니다.
지난 번에 실행 한 번 눌러보셨죠?ㅎ
꾸욱 누르고 있으면 또 다른 녀석들도 나타납니다.. 그 녀석들은 추후에 설명하도록 해요~

<3> Scheme 선택
쉽게말해서, 이 앱을 어디에서 실행할까 설정해 주는 역할을 합니다. 시뮬레이터, 기기 등을 선택할 수 있습니다.

<4> Breakpoints
우리는 차후에 Debug라는 것을 할 때가 올겁니다. 디버그... 즉 벌레시키들을 잡아야 한다.. 버그를 없앤다 뭐 그런거죠 ㅋㅋ 여튼 그 디버그를 할때, 프로그램에서 의심가는 부분 등을 체크해 놓고 유심히 볼때 쓰는 그런 기능입니다. <13>의 Breakpoint gutter로 Breakpoint를 설정 해 줄 수 있고, 지금 이 버튼으로 Breakpoint들을 활성/비활성화 시킬 수 있습니다.

<5> 프로젝트명, 파일명
현재 작업중인 프로젝트와 파일명을 보여줍니다.

<6> 작업내역 확인창
아.. 위에 적은 것들은 제가 임의로 이름 붙인거예요.. 정식 명칭은... 궁금하면 찾아보세요..ㅋㅋ
빌드나 실행 중, 혹은 후에 결과들을 보여줍니다.

<7> 최대화
OSX Lion을 설치하신 분들이라면 보이는 최대화 버튼입니다.

<8> Editor Mode 버튼
화면 하단에 코드가 나오는 에디터 부분의 보기형식을 바꾸는 버튼들입니다.
궁금하시죠? 한 번 눌러보세요~ㅎㅎ 다 눌러보세요~
첫 번째는 단일 기본 화면. (Standard editor Mode)
두 번째는 두개의 에디터창이 생기는 모드. (Assistance editor Mode)
세 번째는 버전 에디터 모드. (Version editor Mode)
버전 에디터가 뭔지는 다음에 설명하도록 할게요~ 한 번에 너무 많은 것을 알면 머리가 뽀개집니다..ㅋㅋㅋ 궁금하시면 검색창에 버전컨트롤, 또는 Repository 등을 치면 많은 정보가 나올거예요.. 일단은 궁금증을 덮어봅시다 ㅋㅋ

<9> View 버튼
전체적인 화면을 크게보면 네 화면으로 나뉘는데요,
첫 번째 버튼으로 나왔다 사라졌다 하는 <11>영역. 네비게이터입니다.
즉, 소스파일이나 검색, 에러 결과창 등등 많은 것들을 우리에게 안내하고 보여주죠.
두 번째 버튼으로 나왔다 사라졌다 하는 <17>영역. 디버그영역입니다.
아까 말씀드렸듯이 버그 때려잡을때 쓰게되는 창입니다.
세 번째 버튼으로 나왔다 사라졌다 하는 <15>,<16>영역. 유틸리티입니다.
정말 유용하고 좋은 기능들을 가지고 있죠. 자세한 설명은 아래에서..

<10> Organizer
Organizer창을 띄우는 버튼입니다.
Organizer에서는 디바이스 관리, Repository관리 등등을 할 수 있구요, 우리에게 가장 필요하고 중요하고 개발 내내 친구가 될 Documentation을 볼 수 있는 창입니다.
개발 문서는 정말 너무너무 중요합니다. 추후에 설명해 드릴게요~

<11> Navigator
Project Navigator, Symbol Navigator, Search Navigator, Issue Navigator, Debug Navigator, Breakpoint Navigator, Log Navigator 등으로 이루어져 있습니다.
말 그대로 안내자 입니다. 현재 작업중인 프로젝트에 관련한 대부분의 내용을 이곳에서 훑어 볼 수 있습니다. 한 번씩 쭈욱 눌러보고 돌아보세요~ 아무런 문제 생기지 않습니다..ㅎㅎ

<12> Jump Bars
프로젝트 내부의 여러 곳들을 점프 점프 하면서 다닐 수 있는 막대기 입니다..ㅋㅋ 한 번 눌러서 여기저기 점프하고 놀러다녀 보세요~

<13> Breakpoint gutter
아까 위에서 말씀드린대로 Breakpoint를 지정할 수 있는 막대 공간입니다.
한번 콕 찍어 눌러보세요. 그럼 퍼런놈이 생깁니다. 이것이 Breakpoint인데요 동시에 <4>영역 Breakpoints도 활성화 될거예요. 그러면 또 Breakpoints도 눌러서 비활성화도 시켜보고 놀아보세요. 그러고 다 놀만큼 놀아보셨으면 Breakpoint들 다 제거해 주세요 ㅋㅋㅋ 제거하는 방법은 스스로 연구해 보시길!! 여러가지 있으니까요..^^
참고로 네비게이션영역에선 프로젝트의 모든 것을 훑어 볼 수 있다고 말씀드렸죠?ㅎ

<14> Editor area
말그대로 에디터 영역입니다. 우리가 소스코드를 작성, 수정하는 곳이죠. xib파일을 누르면 물론 IB 화면이 나옵니다. 이 말이 무엇이냐구요? 저번에 해 봤잖아요~

<15> Inspector pane
인스펙터 판입니다. Inspector하면 한국어로 검열자, 감시관, 감독관 등등의 뜻이있죠? 여기선 관리감독이 가장 맞는 표현이 아닐까 싶은데요, 이녀석은 에디터 영역에 선택된 것들의 속성, 정보 등등 모든 것들을 알고 있구요, 내가 선택한 Object또는 코드내용에 대한 속성과 도움말 등등 많은 것을 알려줍니다. 한 번 프로젝트의 모든 파일들을 한 번씩 클릭해 가며 어떤 내용들을 담고있는지 확인해 보세요~ 

<16> Library pane
말그대로 라이브러리 판입니다. 
File Template Library, Code Snippet Library, Objects Library, Media Library 등이 있습니다. 이곳에도 정말 많은 정보들이 있습니다.
파일 샘플, 코드 샘플, 오브젝트들, 미디어 라이브러리..
그 중 우리가 제일 많이 보게 될 라이브러리는 오브젝트 라이브러리구요, 그 다음으로는 간간히 코드 샘플도 보게 될거예요. 코딩 초보라면 코드 샘플도 많이 많이 봐두시면 좋아요~
비단 Objective-C뿐만 아니라 C/C++샘플 코드들도 있거든요^^

<17> Debug area
말그대로 디버그 할 때 쓰는 영역입니다.
지금 화면 모드가 두개로 나뉘어진 모드인데요.
왼쪽에 보이는 것이 변수들이 나올 창이구요, 오른쪽에 보이는 것이 콘솔창입니다.
디버깅 할때 왼쪽 창에는 변수들과 그 메모리 주소 등이 나오고, 오른쪽에서는 콘솔에 로그들이 찍혀 나오겠죠? 지금 잘 몰라도 차츰 배워가면 되니 걱정마세요~


오늘은 여기까지..^^
지금 있는 설명들은 최대한 간략하게 정리 해 본거예요~
어디 하나 쓸모없는 것 없이 기능들을 알차게 잘 만들어 놓았으니 이것저것 만져보며 익숙해 지시길 바랍니다. 어떤 버튼이 어떤 기능을 하는지도 파악해 두시면 좋구요..^^
또한, 제가 가르쳐 드리지는 않았지만 각 기능에는 대부분 단축키가 있죠? 한 번 알아보세요~
첫 습관과 첫 기초가 중요합니다. 빨리 무언가 해보고 싶더라도, 꼭 한번 Xcode를 쥐잡들이 뜯어보세요 ㅎ
자, 그럼 다음에 뵙겠습니다~


by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기


 

↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓

Posted by yagom

댓글을 달아 주세요

  1. 옥탑방원순이S 2012.03.03 09:43  댓글주소  수정/삭제  댓글쓰기

    이렇게 멋드러지게 잘 설명해주시다니 ^_^
    시중에 파는 책보다 훨씬 낫네요!!
    책에서는 대부분 xcode3 버전으로 된 것들이 많아서
    많이 헷갈렷거든요 >.<
    열심히 배우고 멋진 앱 만들기 도~전!!!

  2. 더벅머리 2012.05.09 17:56  댓글주소  수정/삭제  댓글쓰기

    기초와 기본이 중요하다!!! 새겨듣겠습니다!! 저도 의욕만 앞서 기초와 기본을 제쳐둔 것이 아닌가 돌아보게 되네요. xcode란 프로그램을 일단 잘 알아야 코딩도 할 수 있는 법!! 오늘부터 좀 더 그 녀석이랑 친해져볼께요!~!

  3. 초보kay 2012.07.23 17:23  댓글주소  수정/삭제  댓글쓰기

    많은걸 배우고 갑니다. 감사합니다.

  4. Favicon of http://blackturtle.tistory.com BlogIcon 까만거북이 2013.01.02 22:48  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다. 잘 배우고 갑니다. :)

  5. 딴또 2013.03.06 07:15  댓글주소  수정/삭제  댓글쓰기

    정말 너무 감사합니다. 열심히 공부하겠습니다.

  6. 차나한잔 2013.03.19 19:01  댓글주소  수정/삭제  댓글쓰기

    정말 고맙습니다. 너무 잘 보고 있습니다. 추천 100만번 꾸욱 누릅니다~ ^^

  7. 조언이필요한자 2014.02.20 10:34  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 질문이 있어서요 ㅠㅠ

    프로젝트명을 변경하려고 하는데요

    인터넷 찾아서 View - > Utilities - > File Inspector 클릭후

    변경이름을 치고 리턴을 쳤습니다

    그리고 Rename 으로도 해보고 Don't Rename 을 클릭 하여 프로젝트 명이 변경된것으로 보였는데요

    이제 실행을 시키면 Apple LLVM Compiler 5.0 error 라면서

    Command /Applications/xcode 5/Xcode 5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1

    이 에러가 나는데 해결 방법좀 알려주실수 있을까요??ㅜ

    읽어주셔서 감사합니다.

    좋은하루되십시오~

    • Favicon of https://blog.yagom.net BlogIcon yagom 2014.02.20 18:08 신고  댓글주소  수정/삭제

      안녕하세요!

      일단 프로젝트 명 변경 방법부터 잘못되긴 했는데...

      음... 우선 클린 후 빌드해 보시구요...

      뭐가 잘못되었는지 딱히 잘 모르겠어요..ㅠ

오늘의 주제

1. iTunes Connect에 계좌정보 입력하기


네 번째 시간입니다.
지난번에는 iOS Developer Program 등록 마무리와 개발을 위한 인증서 및 프로비저닝 파일 설치를 했구요~
이번에는 iTunes Connect에 대해 조금 알아봅니다~
자 이제 본론으로 고고 ^^


# iTunesConnect에 계좌정보 입력하기
지난 번에 마지막으로 도착한 의문의 이메일이 있었습니다.
참지 못하고 눌러보신 분들도 계시겠습니다..^^
그 메일이 왜 왔는지 한 번 살펴보도록 할게요~
기쁜 마음으로 iTunes Connect를 클릭해 볼까요?? 후훗..

물론 직접 http://itunesconnect.apple.com/ 으로 진격하셔도 됩니다~! 고고씽~


로그인을 해달라고 하네요~

기쁜 마음으로 로그인~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile26.uf@1946BD3C4EB0FCDA093DC3.png%7Cwidth="500"_##]
또.. 약관에 동의 하라네요~ 뭐 해야지요~
동의~

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile23.uf@1746BD3C4EB0FCDA0A786C.png%7Cwidth=%22500%22%20height=%22330%22%20alt=%22%22%20filename=%223.png%22%20filemime=%22image/jpeg%22%7C_##]
자.. 이제 연락처, 세금, 뱅킹 정보를 입력하는 화면이 나옵니다.
All이라고 써있는 줄의 Request버튼을 눌러줍니다.

[##_http://blog.yagom.net/script/powerEditor/pages/1C%7Ccfile25.uf@1946BD3C4EB0FCDB0B63A7.png%7Cwidth=%22500%22%20height=%22401%22%20alt=%22%22%20filename=%224.png%22%20filemime=%22image/jpeg%22%7C_##]
물론 또 약관이 나오겠지요?
동의해주시구요~


동의 했으니 당연히 고마워 해야죠~
Done버튼 클릭~
 


일단 연락처 정보 먼저 입력해 봅시다. Contact Info의 Set Up버튼을 클릭~


현재 나의 연락처 정보가 입력이 되어있지 않으므로, Add New Contact 클릭~


요런 창이 올라오면 이름, 성, 이메일주소, 직위, 전화번호를 차례로 적어줍니다. 팩스번호는 적지 않아도 무관합니다.
직위에는 개인개발자 또는 1인기업이라면 President라고 적어줍시다.
나 혼자니까 내가 짱이잖아요 ㅋㅋㅋ
만약 회사라면 적당한 직위를 적어주면 되겠습니다.


관리자, 회계, 기술, 법률, 프로모션 담당자가 전부 저군요...ㅋㅋㅋ 전부 세팅해 주고 Done버튼을 눌러줍니다.


자, 이번에는 은행계좌 정보를 입력해 봅시다.
Bank Info 의 Set Up버튼을 눌러줍니다~


미리 저장되어 있는 계좌 정보가 없으므로 Add Bank Account버튼을 눌러줍니다~


은행계좌가 저는 한국꺼 밖에 없으므로.. 한국을 선택해 줍니다.
Korea, Republic of
아... 우리나라는 민주공화국인데... 맞나요? 흐음...
민주 공화국이었나...?
지금 민주공화국이라고 왜 생각이 안들까요...
아! 사설 죄송합니다 ㅋㅋ
젠장 대한민국은 민주공화국인데.. 젠장


여튼 이제 은행 코드를 입력하라고 나오는데요, 우리가 은행코드를 어찌 알겠습니까.
Lookup your Bank를 클릭!


저는 이름으로 검색해 보았습니다.
영어로 검색하셔야 합니다~
자신의 은행정보를 클릭하고 Next를 눌러줍시다.


은행이 맞는지 확인하고 다음 클릭해 줍니다.


계좌번호를 입력하구요, 이름, 그리과 화폐단위는 저는 KRW즉, 한화를 선택했구요, 전화번호를 입력했습니다.
그러나 여기서 주의할 것은 Account Holder Name. 즉, 계좌주 이름이 정확하지 않으면 입금되지 않는다는 내용이 주의사항으로 나와있습니다.
저는 자신의 은행의 고객센터에 전화하여 꼭 영문명을 확인하시길 추천드립니다.
저도 혹시나 해서 전화해보니 아예 영문명이 등록이 되어있지 않아 전화상으로 영문명을 등록했습니다.
카드나 여권 등에 적힌 것과는 달리 은행에 등록되는 영문명은 또 다르니 꼭 확인하시길 바랍니다.


내용이 맞는지 확인하고 저장을 눌러줍니다.
내용이 맞지 않으면 추후에 수입이 들어오지 않을 수 있으니 잘 확인하시길 바랍니다.


자신의 은행정보를 선택하고 저장을 눌러줍시다.


자 이제 Tax Info의 Set Up 버튼을 눌러줍니다. 이건 스샷을 못찍었네요..^^
그럼 아래와 같은 화면이 나옵니다.
우린 호주인도 아니고 캐나다인도 아니고.. U.S. Tax Forms는 모두에게 필요하다고 하니 그거 작성해 줍시다.
U.S Tax Forms의 Set Up버튼 클릭!


미국 시민권자이거나 거주자냐고 묻네요. 아니니까 No.


미국에서 사업중이냐고 묻네요. 아니니까 No.


아래 칸들을 잘 작성해 주시고 확인 버튼 클릭.


다시 한 번 확인하라고 하네요. 앞으로 웹상으로 수정이 불가능하다고 경고하네요. 다시 한 번 확실한지 확인하고 제출합니다.


이번에는 iAd Network에 정보를 등록합니다.
iAd는 애플이 제공하는 모바일 광고 플랫폼입니다.
언제 쓸줄은 모르지만, 뭐 쓰던 안쓰던 나중에 언제 쓸지도 모르고, 지금 시간 얼마 안걸리니까 요것도 작성해 줍시다.
작성방법은 아까와 마찬가지이지만, 이미 정보를 다 등록해 놓았으므로 선택하고 제출만 눌러주면 됩니다. 
방법은 동일하기 때문에 따로 안찍었습니다.


자, 이렇게 하여 모든 정보를 다 입력하였습니다.
추후에 확인이 완료되면 Status가 Processing이 아니라 유효기간이 나오게 됩니다. 


이렇게요~


자, 드디어 등록이 끝나고 iTunes Connect 홈 화면으로 왔습니다~
iTunes Connect에서는 내가 등록한 어플들을 관리하고, 수입과 다운로드 회수 체크 등 여러가지를 할 수 있습니다.
한 번 쭈욱 둘러보세요
어플을 하나 완성하기 전까지는 들어올일이 거의 없지만, 하나 완성하고 나면 자주 들어와볼 그런 곳입니다..ㅎㅎ



오늘은... 아쉽지만 여기까지~
이제 다음 부터는 본격적으로 어플 만들기에 필요한 것들을 차근차근 알아가 볼게요 ㅎㅎ
그럼 다음에 또 만나요~ :-) 

by yagom

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기

Posted by yagom

댓글을 달아 주세요

  1. Favicon of http://talkit.tistory.com BlogIcon 가야태자 2012.06.06 22:08  댓글주소  수정/삭제  댓글쓰기

    음 오늘은 저도 이만 자야겠습니다. ^^;;

    내일 부터는 본격적으로 XCode를 통해서 공부를 해보겠습니다.

    앗 내일은 안되고 주말에 공부할 수도 있구요 ^^;;

  2. Favicon of http://hatnim.tistory.com BlogIcon 햇 님 2012.07.26 17:15  댓글주소  수정/삭제  댓글쓰기

    요즘 한창 iOS 앱 개발을 하는 도중인데 Lion 버젼으로 정리가 잘되어있어서 추천 꾹꾹 눌렀습니다.

    항시 개발은 준비과정에서 반이상은 먹고 들어가는거 같네요!

    구글링과 애플에서 제공하는 샘플코드로 머리 빡빡 굴리던게 뻥 뚫린기분입니다! ^-^

  3. poku 2012.09.04 10:23  댓글주소  수정/삭제  댓글쓰기

    만든 어플을 기기에 등록하는거만 하려면 이건 안해도 되죠..?

  4. 2012.10.30 21:31  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  5. Favicon of http://trapping.egloos.com/ BlogIcon TrappinG 2013.07.02 21:00  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다. 덕분에 수월하게 등록할 수 있었네요.

    다시 한번 감사의 말씀 드립니다.

  6. 김성욱 2017.03.25 14:07  댓글주소  수정/삭제  댓글쓰기

    잘보았습니다

  7. Ted 2017.09.20 04:42  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다.~ 혹시

    Tax Information 등록하실 때, EIN 발급받으셔서 등록하셨나요?

    W-8BEN 폼에 어떻게 작성해야하는지 잘 모르겠네요

    • Favicon of https://blog.yagom.net BlogIcon yagom 2017.09.20 22:48 신고  댓글주소  수정/삭제

      안녕하세요 Ted님,

      그 부분에 대해선 저도 자세히 모르겠습니다^^;

      요즘 등록할때는 어떻게 나오는지 잘 모르겠네요^^;; 도움이 되지 못해 죄송합니다!