2012-04-17 2 views
1

아이폰의 알람 시계 앱과 비슷한 피커 뷰가 있습니다 (첫 번째 구성 요소 = 1-12, 두 번째 구성 요소 = 0-60, 세 번째 구성 요소 = am/pm). 내가하는 일은 피커 뷰의 didSelect 대리자에서입니다.UIPickerView에서 NSDate 가져 오기

if (component == PICKER_HOURS) { 
     rowSelected = [self.hour objectAtIndex:row % 12]; 
     self.hourSelected = rowSelected; 
    } 
    else if (component == PICKER_MINUTES) { 
     rowSelected = [self.minutes objectAtIndex:row % 60]; 
     self.minuteSelected = rowSelected; 
    } 
    else { 
     rowSelected = [self.ampm objectAtIndex:row]; 
     self.ampmSelected = rowSelected; 
    } 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
    dateFormatter.dateFormat = @"h:mm a"; 

    NSString *timeString = [NSString stringWithFormat:@"%@:%@ %@", _hourSelected, _minuteSelected, _ampmSelected]; 
    NSString *trimmedTimeString = [timeString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

    NSDate *dateSelected = [dateFormatter dateFromString:timeString]; 

    NSDate *dateForAlarm = [self alarmDateForDate:dateSelected]; 


------ 


- (NSDate *)alarmDateForDate:(NSDate *)dateSelected { 
    NSCalendar *calendar = [NSCalendar currentCalendar]; 
    NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
                fromDate:[NSDate date]];  // set the date to the current date 
    NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit) fromDate:dateSelected];  // set the time to what's in the picker 

    NSDateComponents *dateComps = [[NSDateComponents alloc] init]; 
    [dateComps setDay:[dateComponents day]]; 
    [dateComps setYear:[dateComponents year]]; 
    [dateComps setMonth:[dateComponents month]]; 
    [dateComps setHour:[timeComponents hour]]; 
    [dateComps setMinute:[timeComponents minute]]; 

    NSDate *dateForAlarm = [calendar dateFromComponents:dateComps]; 

    return dateForAlarm; 
} 

이 방법이 맞습니까? 피커보기에서 내 dateFromString은 항상 1970 시간이라는 것을 알았습니다. 따라서 이것이 미래에 알림을 설정하기 위해 피커보기에서 시간을 얻는 것이 '표준'방법인지 확실하지 않았습니다. 감사! 이것

답변

0

봐 -

날짜 선택 : -

m_pDatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 40, 50, 50)]; 
    m_pDatePicker.datePickerMode = UIDatePickerModeDate; 
    NSDate *minDate = [NSDate new]; 
    [m_pDatePicker setMinimumDate:minDate]; 

    m_pDatePicker.hidden = NO; 
    [m_pClientView addSubview:m_pDatePicker]; 

    [m_pDatePicker addTarget:self action:@selector(pickDateLabel)forControlEvents:UIControlEventValueChanged]; 

    NSDateComponents* comps = [m_pDatePicker.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
                 fromDate:m_pDatePicker.date]; 
    int myDay = [comps day]; 
    int myMonth = [comps month]; 
    int myYear = [comps year]; 

    pickDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myMonth,myDay,myYear]; 

    dueDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myDay,myMonth,myYear]; 

    [m_pDatePicker release]; 
    [minDate release]; 

} 

따기 날짜 -

- (void)pickDateLabel 
{ 

    NSDateComponents* comps = [m_pDatePicker.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
                 fromDate:m_pDatePicker.date]; 
    int myDay = [comps day]; 
    int myMonth = [comps month]; 
    int myYear = [comps year]; 

    pickDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myMonth,myDay,myYear];  

    dueDateLabel.text=[NSString stringWithFormat:@"%d/%d/%d",myDay,myMonth,myYear]; 


} 

는 희망이 도움이!

관련 문제