2009-07-10 4 views
7

У меня есть UIPickerView с несколькими компонентами. Некоторые значения выделены серым цветом, и мой pickerView:didSelectRow:inComponent по достоинству оценит это, переместив соответствующий компонент-подборщик до ближайшего действительного значения, так как UIDatePicker перемещается с «30» до «28» при выборе «Февраль». Затем он вызывает метод делегата для объявления скорректированного значения.UIPickerView selectedRowInComponent: возвращает устаревшие данные после его настройки

Когда мой метод настройки вызывает мой UIPickerViewselectRow:inComponent:animated:YES, значение на экране верное, но значения от selectedRowInComponent: являются устаревшими (от до корректировки для значений серого). Однако, если я вызываю selectRow:inComponent:animated:NO, возвращаемые значения верны, но отсутствие анимации сотрясается.

Я попытался обертывание регулировки в блоке beginAnimations:/commitAnimations и ловить значения в UIView «s +animationDidStopSelector, но я все еще получаю устаревшие значения. Кто-нибудь сталкивался с этим раньше?

Проблема легко дублировать.

[picker selectRow:newValue inComponent:i+offset animated:YES]; 

retValue = [picker selectedRowInComponent:i+offset]; 

Если у вас есть ДА, чтобы оживить его, тогда retValue будет 0 на виду (вы называете его устаревшим). При изменении NO, retValue будет таким же, как newValue.

ответ

1

Я этого не заметил, но простой взлом может заключаться в том, чтобы выполнить анимированную операцию, а затем, как только анимация будет завершена, просто выполните ее снова без анимации. Тогда результаты от selectedRowInComponent должны быть правильными.

Однако, похоже, из вашего тестового кода он возвращает правильные результаты. Если вы попросите сборщика выбрать анимированную строку, то новое значение не будет установлено до тех пор, пока анимация не будет завершена, поэтому, если вы сразу же попросите выбранную строку после начала анимации (которая не будет запускаться до следующей runloop в любом случае), то вы получите старый результат.

Как точно вы все равно ловите конец анимации, не могли бы вы показать код, который вы использовали?

И еще один вопрос: зачем вам это нужно немедленно исправлять? Если вы задаете сборщик явно, то вы уже точно знаете, какое значение задано, так почему вы должны его снова спросить?