2010-12-07 62 views
2

我正在嘗試使用基於UITableView中所選行填充的UIPickerView來設置UI。從本質上講,它與您在開始&「結束」屏幕中看到的用於在日曆應用中添加事件的UI相同。可能取消UIPickerView動量動畫?

http://raoli.com/files/uipicker.png

我有這樣它的選擇器系統會根據選擇填充和正確地更新我的模型......大部分時間我的數據源和委託的設置。

我得到的一個問題是,當有人輕彈選取器視圖,然後在表視圖中更改選定內容時,UIPickerViewDelegate會嘗試記錄表視圖中新選擇的更改,而不是原始選擇。很明顯,在我的代碼中,爲什麼會發生這種情況,並且我有一些想法來重新修改我的行爲,但我想我會看到蘋果在他們的UI中做了什麼。

當您在選取器完成旋轉之前輕彈選取器並切換時間時,立即停止旋轉,選取器將更新爲新類型時間的值,並且原始類型的時間保持不變。我沒有辦法取消動畫,但我可能是錯的。我希望我錯了,因爲這會讓我的生活更輕鬆。

我可以看到的另一種替代方法是針對每個屬性使用不同的UIPickerViews並將它們切換出來。所以,顯然,蘋果的例子會有2個UIPickerView實例。這只是創造了其他需要完成的工作,我想我會看到是否有辦法用最少數量的視圖來完成。

更新阿龍的想法表現出一定的承諾,但它看起來像有一個關於消息是如何被傳遞到委託基礎上,選取器的狀態下,選擇器主要是是否正在動畫數量的邊緣情況。由於似乎無法確定拾取器是否正在旋轉(至少通過公共API),試圖解決可能的配置似乎有問題。我最終選擇了多個選擇器,當所選屬性更改時切換選擇器的可見性,並忽略來自現在隱藏的UIPickerView實例的委託消息。

回答

3

我覺得

- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated 

將是一個不錯的人選。如果animatedNO它應該立即顯示你想要的而不移動。

當您決定設置數據時,請在選取器視圖上調用該方法以反映該設置。我希望它會覆蓋任何當前的動畫或慣性效果,並希望在代表中不會收到didSelectRow:。如果你這樣做,可能有必要忽略它。

+0

不錯的想法,沒有想到它,但不幸的是似乎並沒有把蝙蝠做好。看起來像`pickerView:didSelectRow:inComponent:`實際上是從微調器獲取值,而不是將傳入的值作爲`row`。所以,即使我傳入0,我的UIPickerDelegate也會像13那樣調用`didSelectRow:`委託方法時的值。 但是,你已經產生了一個可能通過子類修復這個問題的想法。謝謝! – Jablair 2010-12-07 23:26:04