아래와 같은 모양을 가지는 PickerView 를 만들어 보겠습니다.
버스의 출발 시간을 나타내는 PickerView 입니다.
왼쪽의 시를 선택하면 오른쪽의 분이 자동적으로 바뀝니다.
우선 ViewBased 로 시작하여 xxxxxxx~ViewController.xib 파일을 열고
PickerView 를 배치합니다.
xxxxxxxAppDeleate.h
헤더파일에 UIPickerView 객체를 선언합니다.
dataSource 와 delegate 를 File's onwer 에 연결시키고
(PickerView에서 오른쪽버튼 클릭 하면 나옴)
만들어둔 객체변수 picker 도 File's Owner 에 연결합니다.
소스코드....
PickerViewTestViewController.m
#import "PickerViewTestViewController.h"
@implementation PickerViewTestViewController
-(void)viewDidLoad
{
[super viewDidLoad];
NSString *str;
hourData = [[NSMutableArray alloc] init];
/*
hourDate 는 9시 ~ 21시 까지 문자 객체를 가지는 배열입니다.
이 배열의 내용을 나중에 PickerView 에 출력하게 됩니다.
*/
for( int i = 7 ; i < 22 ; i++ )
{
str = [NSString stringWithFormat:@"%2d시", i];
[hourData addObject:str];
}
/*
minuteDate 배열은 버스 시간을 나타내는 문자 객체를 가집니다.
나중에 PickerView 에 출력됩니다.
*/
NSMutableArray *minuteData1 = [[NSMutableArray alloc] init];
[minuteData1 addObject:@"50분"];
[minuteData1 addObject:@"10분"];
[minuteData1 addObject:@"10분"];
for( int i = 0 ; i < 9 ; i++ )
{
[minuteData1 addObject:@"20분"];
}
NSMutableArray *minuteData2 = [[NSMutableArray alloc] init];
[minuteData2 addObject:@" --"];
[minuteData2 addObject:@"30분"];
[minuteData2 addObject:@"30분"];
for( int i = 0 ; i < 9 ; i++ )
{
[minuteData2 addObject:@"50분"];
}
NSMutableArray *minuteData3 = [[NSMutableArray alloc] init];
[minuteData3 addObject:@" --"];
[minuteData3 addObject:@"50분"];
[minuteData3 addObject:@"50분"];
for( int i = 0 ; i < 9 ; i++ )
{
[minuteData3 addObject:@" --"];
}
minuteData = [[NSArray alloc] initWithObjects:minuteData1, minuteData2, minuteData3, nil];
[minuteData1 release];
[minuteData2 release];
[minuteData3 release];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}
- (void)dealloc {
[minuteData release];
[hourData release];
[super dealloc];
}
#pragma mark -
#pragma mark UIPickerView
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
/*
numberOfComponentsInPickerView 메서드는 PickerView 가 가질
열(column) 을 갯수를 리턴해야 합니다. 4를 리턴하면
4열을 가지는 PickerView 가 됩니다.
pickerView 인수는 여러개의 pickerView 가 있을때 구분하기 위해
사용되는 듯 합니다.
*/
return 4;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
NSLog(@"numberOfRowsInComponent");
/*
numberOfRowsInComponent: 메서드는 각각의 PickerView 가 가져야 하는 행의 갯수를
리턴해야 합니다.
이 메서드는 numberOfComponentsInPickerView 에서 지정한 열의 수만큼 호출됩니다.
호출시 인자값 component 값은 각각의 열이 가지는 index 값입니다.
따라서 각각의 열이 가져야 하는 행의 수를 리턴시키면 됩니다.
예를 들어 가장 왼쪽열의 행의 갯수를 10으로 하고 싶다면 이렇게 하면 됩니다.
if( component == 0 )
return 10;
두번째 열의 경우 component 값이 1일 경우에 리턴값을 지정하면됩니다.
*/
// 가장 왼쪽열의 행의 갯수를 지정합니다.
if( component == 0 )
return [hourData count];
else{
// 나머지 열의 행의 갯수를 지정합니다.
NSArray *arr;
arr = [minuteData objectAtIndex:component - 1];
return [arr count];
}
}
- (NSString *)pickerView:(UIPickerView *)pickerView
titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
/*
titleForRow:forComponent 메서드는 각각의 항목에 들어가야 하는 문자 값을
리턴해야 합니다.
만약 가장 왼쪽열(row)의 첫번째 행(column)의 문자를 지정하려면
if( component == 0 )
{
if( row == 0 )
{
// '문자열' 은 가장 첫번째 열의 첫번째 행에 들어갑니다.
return @"문자열";
}
}
*/
// 배열의 값을 각각의 위치에 지정합니다.
if( component == 0 )
{
return [hourData objectAtIndex:row];
}
else {
return [[minuteData objectAtIndex:component - 1] objectAtIndex:row];
}
}
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row
inComponent:(NSInteger)component
{
/*
didSelectRow:inComponent 메서드는 각각의 항목을 선택하였을때 해야할
행동을 지정합니다.
만약 두번째 열의 세번째 행의 항목을 선택했을때의 행동을 지정하려면
if( component == 1 )
{
if( row == 2 )
{
// 행동
}
}
*/
// 첫번째 열의 항목을 선택하였을 경우 나머지 행의 항목이 같은 인덱스를 가지는
// 항목을 선택하도록 합니다.
if( component == 0 )
{
// selectRow:inComponent:animated 는
// 지정한 열과 행의 항목을 선택되도록 합니다.
[pickerView selectRow:row inComponent:1 animated:YES];
[pickerView selectRow:row inComponent:2 animated:YES];
[pickerView selectRow:row inComponent:3 animated:YES];
}
else {
int prevRow;
prevRow = [pickerView selectedRowInComponent:0];
[pickerView selectRow:prevRow inComponent:1 animated:YES];
[pickerView selectRow:prevRow inComponent:2 animated:YES];
[pickerView selectRow:prevRow inComponent:3 animated:YES];
}
}
@end
'프로그래밍 > iOS' 카테고리의 다른 글
[Hpple Parser] HTML Parser 2장 - 파싱하기 (0) | 2012.02.09 |
---|---|
[Hpple Parser] HTML Parser 1장 - Hpple 추가하기 (0) | 2012.02.09 |
수동으로 UI 컨트롤에 이벤트 전달 (0) | 2012.02.07 |
[iPhone] 로깅 프레임웍 cocoalumberjack (0) | 2012.02.07 |
애플리케이션 응답성 향상을 위해 동시성 사용하기 (0) | 2012.02.07 |