フォームの作成に使用される多数のセルを含むテーブル ビューがあります。カスタム TableViewCell を作成しました。このセルにはラベルとテキスト フィールドが含まれているため、たとえば、各行は次のようになります。
ラベルとテキストビューを含むカスタムテーブルセルもあり、上の画像と同じように見えますが、テキストビュー用のスペースを確保するためにセルが大きくなっています。
現在、これらのテキスト フィールドとテキスト ビューのそれぞれにツールバーが追加されているため、テキスト フィールドがファーストレスポンダになると、ツールバーに [完了]、[前]、[次] ボタンが表示されます。
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(doneWithTextField:)];
UIBarButtonItem *nextButton = [[UIBarButtonItem alloc]initWithTitle:@"Next" style:UIBarButtonItemStyleDone target:self action:@selector(nextTableTextField:)];
UIBarButtonItem *previousButton = [[UIBarButtonItem alloc]initWithTitle:@"Previous" style:UIBarButtonItemStyleDone target:self action:@selector(previousTableTextField:)];
UIToolbar *numberToolbar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, 320, 50)];
numberToolbar.barStyle = UIBarStyleBlackTranslucent;
numberToolbar.items = [NSArray arrayWithObjects:
previousButton,
nextButton,
[[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],
doneButton,
nil];
[numberToolbar sizeToFit];
field.inputAccessoryView = numberToolbar;
私が抱えている問題は、このような 10 個のテーブル行があるとします。画面には約 5 行と 6 行目のビットしか表示されません。また、テキスト フィールド デリゲートにコードを追加して、テキスト フィールドが最初のレスポンダーになると、画面がスクロールしてテキスト フィールドが完全に表示されるように追加する必要があります。コードについては、こちらの古い投稿を参照してください。
したがって、画面が読み込まれると、最初のセルを押して[次へ]をクリックすると、正常に機能し、次のセルの2番目のテキストフィールドに移動します。次に、もう一度次のボタンを押すと、3 番目のセル、4 番目、5 番目のセルに移動します。この時点で問題が発生します。5 番目のセルで [次へ] をクリックすると、6 番目のテキスト フィールドがファーストレスポンダーになりますが、何らかの理由で画面がスクロールしません。さらに大きな問題は、[次へ] をもう一度クリックしても、7 番目のテキスト フィールドに移動しないことです。これは、7 番目のセルがまだメモリ内になく、画面に表示されていないためです。したがって、次にヒットしても何も起こらず、テキスト フィールド 6 が最初の応答者として残ります。そのため、最初に少し下にスクロールする必要があります。これにより、次のボタンが機能する前にセル 7 が表示され、次のテキスト フィールドがファーストレスポンダになります。
前のボタンを押したときと同じ問題です。前のボタンを押したときに前のセルが画面に表示されていない場合、そのセルが画面に表示されるまで何もしません。
これを回避する方法が見つからないように見えるので、これは私にかなりの頭痛の種を引き起こしています。他の誰かがこのような同様の問題を抱えていますか? この問題を回避する良い方法はありますか?
前もって感謝します
編集:
また、クリックすると各テーブルセルをループして各フィールドにデータを保存するボタンがあると言うと、画面に表示されているテーブルセルのみをループし、残りを無視するため、データの保存が問題になることも追加する必要があります。