Средство выбора даты прокручивается до прошлой даты, даже если минимальная дата установлена ​​​​на текущую дату

Странное поведение в iOS 6.1 Я установил минимальную дату на текущую дату для моего средства выбора даты, как это

NSDate *currentTime = [NSDate date];
[picker setMinimumDate:currentTime];

введите здесь описание изображения

Но когда я запускаю приложение, я могу прокрутить до прошлой даты, хотя она не выбрана, средство выбора не возвращается к текущей дате. Это происходит только с версией iOS 6.1, а в остальном сборщик ведет себя нормально.


person Ankit Jain    schedule 20.03.2013    source источник
comment
Проверьте мой отредактированный ответ ..   -  person moosa0709    schedule 20.03.2013


Ответы (4)


У меня возникла та же проблема, что и у вас, и я исправил ее, установив дату на максимальную дату вручную (в этом случае я установил ограничение на текущую дату):

- (IBAction)pickerValueChanged:(id)sender {

    dispatch_async(dispatch_get_main_queue(), ^{
        UIDatePicker *datePicker = (UIDatePicker *)sender;

        if ([self.datePicker.date compare:[NSDate date]] == NSOrderedDescending) {

            datePicker.date = [NSDate date];
        }

    });
}

Эта функция запускается, когда значение даты из средства выбора даты изменилось. здесь вы можете установить максимальное или минимальное значение.

person Adrien G    schedule 06.05.2013
comment
Это вопрос или ответ? Если у вас есть вопрос, задайте новый вопрос stackoverflow.com/questions/ask. - person nhahtdh; 06.05.2013
comment
Ответьте бонусным вопросом ;) - person Adrien G; 07.05.2013
comment
Пожалуйста, удалите свой бонусный вопрос (таким образом вы не получите никакого ответа, и это загромождает фактический ответ) - если вы действительно хотите получить ответ на свой вопрос, задайте новый вопрос. - person nhahtdh; 07.05.2013
comment
На самом деле datepicker возвращает предыдущую дату вместо frezzed date.so сравнение невозможно - person jothikenpachi; 30.07.2013

Попробуйте этот код

 NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
 NSDate *currentDate = [NSDate date];
 NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
 [comps setYear:30];
 NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
 [comps setYear:-30];
 NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];

 [datePicker setMaximumDate:maxDate];
 [datePicker setMinimumDate:minDate];
person moosa0709    schedule 20.03.2013
comment
Действительно ли вы получаете текущую дату, как и ваш ответ Путь ..? - person Nitin Gohel; 20.03.2013
comment
@Prem Я попробовал ваше решение, и оно не работает. Это ошибка в iOS 6.1? - person Ankit Jain; 20.03.2013
comment
code4app.net/ios/Local-Notifier/4fb5e7c06803fa3a7f000000 Я получил образец по этой ссылке .. Научите меня, если что-то не так .. спасибо - person moosa0709; 20.03.2013
comment
@NitinGohel Да, я столкнулся с проблемой только в iOS 6.1, а в остальном все в порядке. - person Ankit Jain; 20.03.2013
comment
@Prem Я скачал исходный код для уведомления, как вы отправили. В этом приложении я могу прокручивать прошлые даты. Мое требование заключается в том, что когда пользователь прокручивает до выбора прошлой даты, он должен вернуть его к текущей дате. Поскольку нет метода делегата для средства выбора даты, чтобы справиться с этой ситуацией, как мне его контролировать? Главное, такое странное поведение только в iOS 6.1. - person Ankit Jain; 20.03.2013
comment
@Prem Спасибо за помощь, но проблема все еще остается прежней. Я могу прокрутить до прошлой даты. Вы можете проверить эту функцию в других версиях iOS, она работает отлично, но в iOS 6.1 это вызывает проблемы. Если это ошибка в iOS 6.1, какой-либо документ говорит об этом, дайте мне знать. - person Ankit Jain; 20.03.2013

Вы должны установить минимальную и максимальную дату, например:

NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *currentDate = [NSDate date];
NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];

NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
[datePicker setMinimumDate:minDate];
person Nitin Gohel    schedule 20.03.2013

Свойство является объектом NSDate или nil (по умолчанию), что означает отсутствие максимальной даты. Это свойство вместе со свойством MinimumDate позволяет указать допустимый диапазон дат. Если минимальное значение даты больше максимального значения даты, оба свойства игнорируются. Минимальная и максимальная даты также игнорируются в режиме таймера обратного отсчета (UIDatePickerModeCountDownTimer).

Попробуйте установить действительные минимальную и максимальную дату. Меня устраивает.

person Dipak Vyawahare    schedule 18.03.2015