2009-07-10 4 views
7

複数のコンポーネントを持つUIPickerViewがあります。一部の値はグレー表示されています。pickerView:didSelectRow:inComponentは、問題のピッカーコンポーネントを最も近い有効値にシフトすることによりこれを賞賛します。が「2月」を選択すると「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]; 

アニメーションする場合は、retValueは0であることに注意してください。 NOに変更すると、retValueはnewValueと同じになります。

答えて

1

私はこれに気付きませんでしたが、操作をアニメーションで実行するのが簡単な場合があります。アニメーションが完了したら、アニメーションなしでもう一度実行してください。その後、selectedRowInComponentの結果が正しいはずです。

ただし、テストコードから正しい結果が返されているようです。ピッカーがアニメーション行を選択するように依頼すると、アニメーションが完了するまで新しい値が設定されないため、アニメーションを開始した直後に選択行を要求すると(次回の実行ループまでは開始されません) )、あなたは古い結果を得るつもりです。

とにかく、アニメーションの終わりを正確にどのようにキャッチしていますか、使用したコードを表示できますか?

もう1つ質問がありますが、なぜこれがすぐに正しくなる必要がありますか?ピッカーを明示的に設定している場合は、設定されている値が正確であることをすでに知っているので、なぜそれをもう一度尋ねなければなりませんか?

関連する問題