昨日ここでこの質問をしました
TextFieldsを備えたiPhoneTableView-次、前のボタンの問題
これは、次の前のボタンで発生した問題に関するものでした。ありがたいことに、私はそれを分類しました。今私が抱えている問題は、データがテキストフィールドにどのように保存されているかです。この問題を自分ですばやく再現し、新しいプロジェクトを作成して、テーブルビューを含むビューコントローラを作成できます。次に、ラベルとテキストフィールドを含むカスタムテーブルビューセルを作成し、このテーブルにたとえば10個のセルを作成します。
したがって、最初のテキストフィールドにランダムなテキストを入力してから、テーブルの一番下までスクロールすると、メモリに読み込まれるテキストフィールドの1つが、最初のテキストフィールドと同じテキストで表示されます。 、そして本当に速く上下にスクロールすると、テキストはテキストフィールド間をジャンプし続け、入力した最初のテキストフィールドのテキストが消えて、代わりに2番目または3番目のセルに表示されることがあります。
例最初のテキストフィールドにtest1を入力すると、次のように表示されます。
次に下にスクロールすると、セル8のテキストフィールドにも何らかの理由でまったく同じテキストが表示されます
回避策として、昨日表示されたカスタムテーブルビューセルクラスにこのコードを追加してみました。sDataという文字列オブジェクトを追加し、ユーザーがそのテキストフィールドの編集を終了すると、テキストがそのオブジェクトに保存されます。
#pragma mark - UITextFieldDelegate
- (void)textFieldDidEndEditing:(UITextField *)textField {
self.sData = inputOne.text;
if (self.didEndEditingAction) {
self.didEndEditingAction();
}
このメソッドもカスタムテーブルビューのセルクラスに追加しました
- (void)reloadData {
if(self.sData != nil)
{
self.inputOne.text = self.sData;
}
そして、cellForRowAtIndexPathメソッドでこれを呼び出しますが、同じ問題が発生します。
これにより、いくつかの問題が発生します。主に、テキストフィールドを含むセルが画面に表示されていないかのようにデータを保存しようとすると、メモリに読み込まれず、テキストフィールドのデータを保存できません。そしてもちろん、他の問題は、フィールド内のテキストが何らかの理由で別のセルに消えて再表示され続けることです。
なぜこれが起こっているのか、そしてこれに対する良い回避策があるかどうか誰かが知っていますか?
前もって感謝します!
編集:
うまくいかないと思ったのですが、配列を作成し、textFieldDidEndEditingデリゲートメソッドの下でこれを実行しました。
BOOL bAdd = YES;
for(int i = 0; i < [tableArray count]; i++)
{
UITextField *field = [tableArray objectAtIndex:i];
if(field.tag == textField.tag)
{
bAdd = NO;
break;
}
}
if(bAdd)
{
NSLog(@"Adding %i", textField.tag);
[tableArray addObject:textField];
}
次に、cellForRowAtIndexPathメソッドの下に、これを追加しました
for(int i = 0; i < [tableArray count]; i++)
{
UITextField *field = [tableArray objectAtIndex:i];
if(field.tag == cell.textField.tag)
{
cell.textField.text = field.text;
break;
}
}
これは確実に機能すると思いましたが、同じ奇妙な問題が発生していて、理由がわかりません:@