解決策は奇妙です。 Filipeは正しい方法は[wordsTableView reloadData]
であり、これにより可視セルごとにtableView:cellForRowAtIndexPath:
が呼び出されます。このメソッドは、テーブルをスクロールするときにも呼び出されるため、reloadDataが機能していない場合は、データを変更してスクロールするときに、正しく更新されないバグが発生する可能性があります。あなたのclearValuesメソッドでは、同じことをtableView:cellForRowAtIndexPath:
を呼び出して実行しています。
本当の問題はあなたのtableView:cellForRowAtIndexPath:
実装にあると思います。この方法には一般に2つのセクションがあります。文は、一般的に、あなたのセルにサブビューを追加する必要がある唯一の場所である場合
その内部
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
}
:まず、あなたのような何かを参照を取得するために、細胞を作成したり、リサイクル。 dequeueReusableCellWithIdentifier:
がセルを返す場合は、既にサブビューがあるはずです。
次に、if文の後に、サブビューの内容を入力または更新します。元のコードの問題は、セルにテキストフィールドがないと仮定して、テキストフィールドにデータを入力してサブビューとして追加することです。あなたはおそらくあなたがUITextFieldDelegateでそれを使用できるように、行番号にテキストフィールドのタグ値を設定することができるように見えます
int textFieldTag = 100;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(158, 6, 148, 24)];
[textField setTag:textFieldTag];
[textField setDelegate:self];
[cell addSubview:textField];
[textField release];
}
UITextField *textField = [cell viewWithTag:textFieldTag];
NSString *strReplacement = [valueArray objectAtIndex:indexPath.row];
if (([strReplacement length] != 0) {
textField.text = strReplacement;
} else {
textField.placeholder = @"Add Value";
}
:だからあなたのtableView:cellForRowAtIndexPath:
がより次のようになります。これは、行1のセルがdequeueReusableCellWithIdentifier:
でリサイクルされ、行12になるかのように、予期しないタグ値を持つようなバグにつながる可能性があります。今起こっていなくても、それは起こるのを待っているバグであり、トラブルシューティングには手間がかかります。
私がUIButtonを押すと、valueArrayの値がパージされます(値がパージされていることが確認されます)が、リロード値の後もreloadDataの後にUITextFieldsが入力されます。 –
が奇妙です。 'cellForRowAtIndexPath:'メソッドにブレークポイントを置き、 'reloadData'の後に' valueArray'の内容を見てみてください。 – filipe
- (IBAction)clearReplacements:(ID)、送信者{\t \t \t \t \t \t \t \t \t \t \t \t \t [self.valueArray removeAllObjects]。 \t [myTableView reloadData]; \t }テーブルをリロードしません。ブレークポイントを使用するコードは、reloadDataの後で停止します。 –