[iOS] UIDatePicker 사용법

UIDatePickerUIContoller의 서브클래스로 버튼(UIButton)이나 슬라이더(UISlider)와 같은 기능을 수행하는 단위 컨트롤이라 생각하고 사용하면 된다. 사용자가 날짜를 변경했을 때는 버튼이 눌러질 때와 마찬가지로 UI 단에서 컨트롤러로 메시지를 보내야 하므로 타깃-액션 매커니즘에 의해 메시지를 받을 수 있다. 일견 복잡해 보이나 다음과 같이 단순하게 생각하면 된다.

1. NSDate 유형의 날짜 정보를 사용자로부터 입력 받기 위해 사용하는 UI 단위이다.

2. IB에서 추가한 후, 여러 설정 (시간단위까지 입력할 것인지, 시간의 범위는 어떤지 등)을 바꿀 수 있다.

3. 날짜가 변경되었을 때 컨트롤러가 받을 메시지를 위해 IBAction 메소드를 이용한다.

4. date 프로퍼티를 사용하여 현재 표시되는 날짜를 얻을 수 있으며, setDate:animated: 메소드를 사용해서 특정 날짜를 표시하도록 date picker를 변경할 수 있다.

예제 – 설정한 날짜를 레이블에 표시하기

UIDatePicker를 사용하여 변경한 날짜를 레이블에서 표시하도록 하는 예제를 살펴보자.

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *dateLabel;
@property (weak, nonatomic) IBOutlet UIDatePicker *datePicker;
@end;

이상과 같이 인터페이스에서 아울렛을 설정한다.

@implemetation ViewController
@synthesize dateLabel = _dateLabel;
@sybthesize datePicker = _datePicker;
-(void)viewDidLoad {
    [self.datePicker addTarget:self 
                        action:@selector(dateDidChange) 
             forControllEvents:UIControlEventValueChanged];
}

여기서 addTarget:action:forControllEvents: 는 특정한 UIControl에게 특정 이벤트에 있어 타깃액션을 보내도록 설정해준다. 인터페이스 빌더에서 ctrl-drag로 연결하면 이 메소드가 정의된다고 보면 된다.

-(void)dateDidChange
{
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.timeStyle = NSDateFormatterShortStyle;
    df.dateStyle = NSDateFormatterShortStyle;
    self.dateLabel.text = [df stringWithDate:self.datePikcer.date;
}

NSDate 객체로 만들어진 날짜는 NSDateFormatter를 사용하여 날짜를 포맷에 맞는 문자열로 변경할 수 있다.