0

10個のセクションがあるグループテーブルビューがあり、各セクションには1つのセルがあり、各セルにはテキストフィールドがあります。

ユーザーがテキストフィールドをタップすると、親セルが下にスクロールして、キーボードの真上に表示されます。

すべてのテキストフィールドには「次へ」のリターンキーがあるため、ユーザーがそれをタップすると、次のテキストフィールド(下のセル内)がファーストレスポンダーになります。

問題は次のとおりです。
ユーザーがインデックス5のセルのテキストフィールドをタップすると、キーボードがポップアップ表示され、テーブルビューがスクロールして、このセルがキーボードの真上に表示されます。
ここで、ユーザーは次のボタンを押します。
私がしたいのは、インデックス6のセルのテキストフィールドを最初のレスポンダーにすることです。
しかし、どうすればこのテキストフィールドを取得できますか?
セルを取得しようとするとcellForRowAtIndexPath、セルが表示されないため、nilになります。

4

2 に答える 2

1

2つの解決策が思い浮かびます。

1)セルが少ないので、リサイクルしないでください。起動時にセルを作成し、簡単に取得できる配列に配置します。次に、tablviewがセルを要求したら、セルを引き出します。配列。

次に進みたいときは、同時にテーブルビューにそのような場所またはセルにスクロールするように指示し、セルを配列から引き出し、画面外のフレームでビューに追加して、表示されないようにします。 textFieldを最初のレスポンダーにします(キーボードを上げたままにするため)。tableViewがセルを要求するとき、フレームをリセットするか、フレームをリセットしてビューから削除する必要がある場合があります。これを行う必要がある場合は、すぐにファーストレスポンダーにする必要があります(テキストフィールドがファーストレスポンダーを辞任しないように、ブロックをメインキューにディスパッチします。

2)同様に、セルのtextFieldを最初のレスポンダーにし、それが表示されているセルに含まれるようにする場合は、スクロールして最初のレスポンダーにすることができます。それがvisibleCellsにない場合は、セルを作成し、上記のようにビューに追加し、上記のようにファーストレスポンダーの処理を行い、そのセルのインデックスを求められたら、そのセルを指定し、場合によってはフレームをリセットします。

私はオフスクリーンのtextFieldsを使用して、キーボードでトリックをプレイしました(キーボードを維持したり、起動したりするためなど、それが機能することはわかっています)。私にとってそれほど確実ではないのは、textFieldがビューにあるかどうかのトリックです。

これは私に第三の道を考えさせます。UITextFieldを画面外のビューに配置します。切り替えたいが、セルがまだ表示されていない(つまり、作成されていない)場合は、オフスクリーンのtextFieldにfirstReponderを指定し、tableViewのスクロールを追跡します。これで、textFieldが終了すると、最初のレスポンダーが表示されます。そのため、キーボードを上げたまま、firstResponderを転送(つまり設定)できます。

于 2012-08-22T18:03:07.747 に答える
1

行を作成する方法はわかりませんが、UITableViewがセルをリサイクルすることを考慮する必要があります。つまり、テキストフィールドは理論的には以前と同じで、内容が変わるだけです。

したがって、必要なのは、キーボードの真上に配置されているテキストフィールドを知っていることを確認することだけです。ビューが入ったときにこれが作成され、実際には変更されない場合でも、私は驚かないでしょう。

この場合も、テーブルはセルとそのコンテンツホルダーをリサイクルし、指定した行に対応するデータのみを入力します。

セルを作成してリサイクルするコードを投稿すると、より具体的になります。

于 2012-08-22T17:52:09.323 に答える