1

複数のテキストフィールド、いくつかのテキストビュー、およびそれらに重ねられた非表示のボタンによって操作される2つのフィールドで構成される UIView にフォームがあります。テキストフィールドをクリックすると、テキスト入力用のキーボードがポップアップし、前と次のデータ入力に移動するためのツールバーを追加しました (データ入力が何であれ、テキストフィールド、テキストビュー、または 2 つの特殊なケースのいずれか)。ボタンと対話する)。これらのボタンを使用してテキストフィールド間を移動すると、すべて正常に動作します。私のスクロールビューのコンテンツは、最初のレスポンダーになる要素に沿って移動します (ビューのかなりの部分を隠すキーボードの高さを考慮しながら、ビューをスクロールするスタックオーバーフローのコードの助けを借りて)。これが視覚的な例です。

ここに視覚的な例があります

非表示のボタンと相互作用する特定のデータ エントリ (日付) から切り替えたい場合に問題が発生します。最初にいくつかのコンテキストを示します。これらのデータ エントリには、アクション シートに日付ピッカー (1 つは日付用、もう 1 つは時間用) が表示され、それらのアクション シートにはツールバーにナビゲーション ボタンもあります。

そのようです

ビューを再調整するstackoverflowのコードは、テキストフィールドとテキストビューのdidBeginEditingデリゲートメソッドでそうするので、最初のレスポンダーを割り当てると、キーボードを考慮しながらスクロールビューが調整されます。

これは、特別なデータ エントリに切り替えた場合に、次の要素を表示できるようにスクロール ビューのコンテンツを手動で移動することを意味します。特別なエントリからテキストフィールドに切り替えると、前述のスタックオーバーフローのコードが作動してビューを調整すると想定します。時間データ エントリ (アクションシートで日付ピッカーを使用) から次の要素であるテキスト フィールドに移動すると、実際に実行されます。ただし、日付データ入力 (時間データ入力の直前) で [前へ] を押して、その上のテキストフィールドにファーストレスポンダーを割り当てると、スクロールビューがテキストフィールドよりも先に進みます。

バグ

注意すべき重要なことは、この問題はテキストフィールドが表示されていない場合にのみ発生するということです。これは、ビューを再調整するコードを間違って使用していると思われます。たとえば、コードにはキーボードの高さを表す定数があります。216 から 260 に変更してみました (キーボードの上に追加されたツールバーを考慮に入れるため)。

私はこのバグでちょっと迷っており、私の投稿はすでにかなり長いです。新しいプロジェクトで私の問題の例を用意しました。もしあなたがそれを調べてくれるなら、私は非常に感謝しています。 ここにあります

4

0 に答える 0