2009-07-10 35 views
7

我有一個UIPickerView與多個組件。有些值是灰色的,我的pickerView:didSelectRow:inComponent通過將有問題的選取器組件轉移到最接近的有效值來承認這一點,就像UIDatePicker當您選擇「February」時從「30」移動到「28」一樣。然後它調用一個委託方法來公佈調整後的值。UIPickerView selectedRowInComponent:代碼調整後返回陳舊的數據

當我的調整器方法調用我的UIPickerViewselectRow:inComponent:animated:YES時,屏幕上的值是正確的,但selectedRowInComponent:的值是陳舊的(從調整灰度值之前)。但是,如果我撥打selectRow:inComponent:animated:NO,返回的值是正確的,但缺少動畫是令人不安的。

我已經試過包裝在一個beginAnimations:/commitAnimations塊的調整和追趕在UIView+animationDidStopSelector的值,但是我還是過時的值。有沒有人遇到過這個?

該問題很容易重複。

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

retValue = [picker selectedRowInComponent:i+offset]; 

如果你有YES來動畫它,那麼retValue就是0(你稱之爲陳舊)。更改爲NO,retValue將與newValue相同。

回答

1

我沒有注意到這一點,但一個簡單的黑客可能是執行動畫操作,然後一旦動畫完成,只需再次執行它,而不需要動畫。那麼selectedRowInComponent的結果應該是正確的。

但是,從您的測試代碼看來,它正在返回正確的結果。如果您要求選取器選擇動畫行,那麼在動畫完成之前不會設置新值,所以如果在剛開始動畫之後立即要求選定的行(直到下一個循環纔會開始) ),那麼你將會得到舊的結果。

無論如何,你到底在捕捉動畫的結尾,你能展示你使用的代碼嗎?

另一個問題是,爲什麼你需要這個立即正確?如果您明確地設置選取器,那麼您已經確切知道設置了什麼值,那麼爲什麼還要再問一次呢?