2

それぞれテキストフィールドを含むカスタムセルを持つ単純なテーブルがあります。cellForRowAtIndexPath: indexPath.row応じて各セルを作成して初期化します。

case 0:
{
    CellIdentifier = @"TextEditCell";
    TextEditCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:CellIdentifier owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
    }

    [cell configureCellWithText: [self.valueArray objectAtIndex:0]
                    placeholder: @"value no.0"]

    [cell performAction: @selector(saveValue0:)
        forControlEvent: UIControlEventEditingDidEnd
               inTarget: self];

    return cell;
}

configureCellWithText:placeholder:セルの textField のテキストとプレースホルダーを設定します。 performAction:forControlEvent:inTargetは textField を直接参照し、textField の値をローカル配列に保存して、再度使用したときに正確になるようにします。

テーブルを高速でスクロールすると問題が発生します。異なるセルの値が別のセルにコピーされ、ローカル配列が変更されます。なぜそれが起こるのかわかりません。誰でも何か考えがありますか?必要に応じて、さらにコードを提供できます。

4

1 に答える 1

0

これは、セルを再利用していて、セルの再利用後に configureCellWithText が実行されているために発生しています。これを解決するには、次のことができます。

  1. セルを再利用しないでください - しかし、これはパフォーマンスを著しく低下させます。
  2. 6.0 で実行しているtableView:didEndDisplayingCell:forRowAtIndexPath:場合は、セルが画面外にスクロールしたときにテキスト設定アクションをキャンセルするために使用できます。
  3. セルをデキューするときに設定するカスタム セル クラスにフラグを作成できます。

編集

あなたの細胞の働きがわからないからです。sudo コードの概念以上のものを提供するのは難しいです。

これが私のsudoコードです:

行のテーブルビュー セル... - セルをデキュー - [セル cancel_previous_action] - 新しいアクションを設定します。

于 2013-02-13T17:33:45.210 に答える