2011-07-25 51 views
2

我有一個UIPickerView的小問題。它是一個顯示爲SemiModalViewController的類的一部分,可以通過按下OK按鈕在任何時候解散(並釋放)它。這個類也實現了UIPickerView委託功能,以接受任何選擇更改等。UIPickerView在滾動結束時崩潰,但選取器視圖已被釋放

問題是當按下確定按鈕時UIPickerView可能仍然滾動到一個條目 - 這當然會導致崩潰,因爲結束的滾動將嘗試調用已經釋放的UIPickerView的父類中的選擇已更改的委託。

有沒有什麼辦法來檢查選擇器視圖是否處於滾動狀態,並等待它結束之前,我解僱了父類?我寧願將代理函數留給提到的父類,因爲這會形成一個「可忽略的普通Picker」UI組件,而且我不想保留所有這些類,直到應用程序結束才確保滾動機械臂最終結束......

回答

0

好吧,我開發的解決方案......

事實上,所有我想要做的就是確保選取器不會嘗試更改事件發送到選擇一個不存在的父類。如果選取器仍在滾動,那也可能意味着丟棄它可能達到的任何最終值。

不幸的是,的UIDatePicker和UIPickerView也都在行爲完全不同,所以解決辦法是比我想象的更多的工作。

對於那些有興趣誰:

我做了跟蹤我創造一切拾荒者的一個單獨的類。這個singleton類也可以作爲所有Picker回調的代表 - 所以所有的pickers都會成功地調用它們。當然,如果父類不再存在,結果將被丟棄。

一旦我擺脫了Picker,單身人士在x秒後將其標記爲刪除,並在此時間之後將其從隨後的選取者列表中刪除。實際上,我可以立即移除Picker,因爲單身仍然會從該拾取器回調任何回調,並忽略結果。

一些努力,但它現在像一個魅力。沒有更多的崩潰,並在所有情況下定義的行爲:-)。

0

我不認爲這是檢查是否thUIPicker是動畫的方法,但你可以在關閉模式視圖的方法做一些檢查。檢查當前選擇索引等待.5秒,然後再次檢查。如果它鏈接你知道它仍在滾動。

+0

等待和檢查總是有可能,但它總是感覺像一個黑客...我做了 – TheEye

+0

在這裏找到某種答案,雖然:http://stackoverflow.com/questions/5237696/read-position-但它也是一種黑客行爲...... – TheEye

+0

嗯,有時候這就是你必須要做的事情。 – Cyprian

0

我也有類似的問題,並通過剛剛駁回父視圖控制器之前加入

picker.delegate = nil; 

解決它。向nil發送消息是可信的,我相信。

但是,這可能會導致選擇器中的視圖切換到'?'瞬間標註。