1

3 つのコンポーネントを持つピッカーがあります。

最初の 2 つのコンポーネントは、最後のコンポーネントに依存しています。

したがって、次のようになります。

  1. | | 5 | M (線は異なる列を表します) または 1" | 5" | FT

2 番目または 1 番目の列を移動していて、回転が止まる前に 3 番目の列を FT から M に、またはその逆に移動すると、移動中にアプリがクラッシュします。

pickerView:didSelectRow:inComponent:UIPicker のデリゲート メソッドで、3 番目の列の最終値、つまり M または FT に基づいて計算を実行しているため、これが発生していることがわかります。

つまり、一言で言えば

pickerView:didSelectRow:inComponent:ユーザーが逆の順序でそれらに触れたにもかかわらず、最初の列の前に 3 番目の列で 実行しています。

これを解決する方法はありますか?

コンポーネントがまだ回転している場合、ユーザーが別のコンポーネントを移動できないようにすることはできますか?

どんな助けでも大歓迎です

ありがとう

トム

4

2 に答える 2

3

コンポーネントが回転している間は値が選択されていないため、呼び出されることはないと思います。pickerView:didSelectRow:inComponent:回転が停止すると、デリゲートにメッセージが送信されます。最初にタッチされたコンポーネントではなく、回転を停止した最初のコンポーネントが最初に送信されます。これが、最後に触れたにもかかわらず、3 番目の列が最初の 2 列の前にメソッドを呼び出す理由です。

クラッシュは、移動コンポーネントの選択された行の値が nil である操作を実行しようとしたことが原因であると思われます。その場合、操作を実行する前に、選択した各コンポーネントの値が nil でないことをテストすることで、クラッシュを回避できます。コンポーネントがまだ回転している場合は、停止するまで操作をスキップする必要があります。

コンポーネントを凍結する可能性はないと思います。

于 2010-01-06T19:24:49.597 に答える
2

コンポーネントの上に明確な UIView を配置することで、コンポーネントを「フリーズ」できます。1 つのコンポーネントが回転し始めるとすぐに、クリア ビューを表示して、他のコンポーネントでのユーザー操作を防ぐことができます。

これにより、この問題が発生しなくなります。

于 2010-01-06T22:32:29.913 に答える