오늘의 주제
- UIPickerView
- UIPickerViewDelegate
서른 두번째 시간입니다.^^
지난 번에는 뺑글이를 돌려보셨겠지요?ㅎ
오늘은 사용자의 입력받기를 해 볼까 합니다~
그 중에 하나로 피커뷰를 해 볼게요~
그 전에 이제껏 우리가 사용했지만 제대로 알지 못했던 NSArray에 대해 조금 알아보고 오시면 좋겠습니다.
Objective-C 카테고리에 포스팅이 되어있어요^^
2012/04/20 - [Objective-C] - Objective C <11>. 딕셔너리, 배열 ( NSDictionary, NSArray )
자, 다 보셨으면 출발 해 볼까요?ㅎ
스따뚜!!
피커뷰란?
피커뷰에는 크게 두 가지 종류가 있습니다.
데이트피커뷰, 피커뷰.
말 그대로 날짜 선택 뷰와 일반적인 선택 뷰.
이렇게 두 가지가 있습니다.
날짜선택 이라고 하니까 어떤 녀석인지 감이 확 오시나요?ㅎ
맞습니다 바로 그 녀석입니다~
오늘 해 볼 녀석은 일반적인 피커뷰 입니다.
이녀석만 되면 뭐 날짜 선택 정도야 레퍼런스 보면서 충분히 하실 수 있으리라 믿습니다^^
UIPickerView
이제껏 사용하였던 프로젝트 그대로 계속 사용합니다~ㅎ
ViewController.xib에서 ViewController.h로 아울렛과 액션을 그림과 같이 연결 해 줍니다.
(이 정도는 이제 설명 안해드려도 할 수 있으시겠죠? )
자, 그리고 우리는 PickerView를 사용할 것인데...
항상 말씀드리듯이, 이 얼굴마담들은 지 할일을 안합니다...ㅋㅋ
그리고 자신을 나타낼 데이터들을 어디선가 뽑아와야 합니다.
그래서 우리는 ViewController를 PickerView의 데이터소스이자 딜리게이트로 선언해줍니다.
그리고 우리는 피커뷰에서 음악 이름을 선택하는 것을 만들어 보려 합니다.
음악 제목들이 들어갈 NSArray를 클래스 멤버 변수로 선언을 해 줍니다.
그리고 아까 잘 연결 하셨으면 아래처럼 아울렛과 액션이 잘 작성이 되어있을 거예요~
자, 저렇게 선언해 주시고 빌드(커맨드+B)를 해 봅시다.
아마 생전 처음보는 Warning이 발생할거예요~
잘 노려보세요 ㅎㅎ
일단 음악 이름이 들어갈 배열을 초기화 해 주시구요 ㅎ
경고를 다시 읽어봅시다.
프로토콜의 메서드가 완성되지 못했다고 지껄이는거 같죠?ㅎㅎ
맞습니다. 누군가가 누군가의 딜리게이트 또는 데이터소스의 역할을 수행한다고 선언했으면 꼭 필수적으로 구현되어야 하는 메서드가 있을 수 있습니다.
피커뷰 같은 경우에는 필수적으로 구현되어야 하는 메서드가 있습니다. 그래서 경고를 띄워주는 것입니다.
그리하여 무슨 메서드가 꼭 필수로 들어가야 하는지 레퍼런스 탐험을 해 봅니다.
피커뷰 데이터 소스 레퍼런스를 봅니다.
두 메서드 전부 필수(required) 메서드이군요.
필수이므로 살짝 복사해서 ViewController.m으로 가져옵니다 ㅎ
피커뷰 딜리게이트에는 필수 메서드는 없네요~ 하지만 우리가 필요한 메서드가 있을 것 같네요~
빨간 네모 쳐진 메서드의 설명을 읽어보면 열(row)를 선택했을 때 호출되는 메서드라고 설명이 있네요~
유저의 선택에 대해 응답하여야 하므로 복사해 옵니다~
자, 그리고 이쁘게 코딩을 해 볼까요?ㅎ 뭐, 설명은 역시나 주석에^^
실행해 봅시다! 어!?
요상합니다~ 평소에 보던 모습이 아니죠?ㅎ 위치도 이상하고... 물음표만 나오고 ㅠ
그럼 소스코드를 살짝 고쳐봅시다~
이번엔 위치가 이쁘게 잡혔네요~
그럼 물음표는??? 대체 왜 나올까요?? 저 물음표대신 내가 원하는 것이 나오게 하려면 어떻게 할까요?
음... 저 데이터는 어떻게 가져와야 할까요?ㅠ
그렇죠~
데이터소스에서 건져올 수 있겠죠?ㅎ 역시!
데이터 소스의 메서드를 살짝 만져 줍시다 ㅎ
짜잔~~ 이쁘게 나오네용 ㅎㅎ
이렇게도 해 줄 수 있습니다. 이건 어떻게 했냐구요?ㅎ
레퍼런스를 뒤적뒤적 해보시면 나오겠죠?ㅎ
오늘은 추가적으로 혼자 해 볼 것들을 던져 드리겠습니다 ㅎㅎ
-
바로 위의 그림처럼 셀렉트 인디케이터가 나오도록 옵션을 줘 보세요 ㅎ
-
미완성인 이 예제를 제목을 선택했을 때 그 음악이 실행이 되도록 수정해 보세요~
-
여러개의 컴포넌트를 가지는 피커뷰를 만들어 보세요~
답은 공개하지 않습니다~ 여러분의 몫입니다 ㅎ
그럼 오늘은 여기 까~지~~~!
by yagom
p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.