Получение NSDate из UIPickerView
У меня есть вид выбора, похожий на приложение будильника на iphone (первый компонент = 1-12, второй компонент = 0-60, третий компонент = утра / вечера). То, что я делаю, это в делегате didSelect представления выбора.
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-го года. Поэтому я не был уверен, был ли это "стандартный" способ получить время из представления выбора, чтобы в будущем установить уведомление. Спасибо!
1 ответ
Решение
Посмотри на это -
Выбор даты:-
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];
}
Надеюсь, поможет!!