0

ここに画像の説明を入力してくださいこの画像を確認してくださいここに画像の説明を入力してください1つの行に3つのテキストフィールドを配置し、別の行に1つのテキストフィールドを配置しました。1つの配列ですべてのテキストフィールドを取得し、次のように記述しました。cellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier ];
        if (indexPath.row == 0) {

            UITextField *tf = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 100, 30)];
            tf.delegate = self;
            tf.tag = 16;
            tf.borderStyle = UITextBorderStyleRoundedRect;
            [cell.contentView addSubview:tf];
            [tf release];

            UITextField *tf1 = [[UITextField alloc]initWithFrame:CGRectMake(150, 10, 100, 30)];
            tf1.delegate = self;
            tf1.tag = 17;
            tf1.borderStyle = UITextBorderStyleRoundedRect;
            [cell.contentView addSubview:tf1];
            [tf1 release];
        }
        else {
            UITextField *tf3 = [[UITextField alloc]initWithFrame:CGRectMake(10, 10, 100, 30)];
            tf3.delegate = self;
            tf3.tag = 18;
            tf3.borderStyle = UITextBorderStyleRoundedRect;
            [cell.contentView addSubview:tf3];
            [tf3 release];

        }

    }
    UITextField *tf = (UITextField *)[cell.contentView viewWithTag:16];
    tf.text =  [m_textFieldArray objectAtIndex:indexPath.row];

    UITextField *tf1 = (UITextField *)[cell.contentView viewWithTag:17];
    tf1.text =  [m_textFieldArray objectAtIndex:indexPath.row];
    UITextField *tf3 = (UITextField *)[cell.contentView viewWithTag:18];
    tf3.text =  [m_textFieldArray objectAtIndex:indexPath.row];
   // cell.textLabel.text = @"Hiiiii";
    return cell;
}

textFieldDidEndEditingメソッドで次のように書いた。

[textFieldsDataArray replaceObjectAtIndex:currentIndexPath.row withObject:textField.text];

私の問題は、1つのテキストフィールドにテキストを入力して上下にスクロールすると、同じテキストが同じ行の残りの2つのテキストフィールドに移動することです。

3つのテキストフィールドにテキストを入力してからスクロールすると、最後のテキストフィールドからすべてのテキストが取得されます。

4

1 に答える 1

1

セルの再利用に問題があるようです。

パフォーマンスを向上させるために、UITableViewは、新しいセルを作成する代わりに、画面外のセルを再利用します。セルが再利用されるとき、それはそれをクリアしません。必要な情報を再割り当てするのはあなたの仕事です。

次のような情報を設定します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]

    // If the cell is nil, it is a new cell and you need to init it    
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // setting the cell's information
    cell.textLabel.text = [dataSource objectAtIndex:indexPath.row];
    cell.textLabel.textAlignment = UITextAlignmentLeft;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.selectionStyle = UITableViewCellSelectionStyleBlue;

    return cell;
}
于 2012-08-28T16:55:43.370 に答える