0

セルを含むテーブルがあり、各セルにはUITextFieldがあります。これらのテキストフィールドのデリゲートをselfに設定し、編集が終了したときにいくつかの計算を実行しています。

私の問題はテキストフィールドにあります。最初のフィールド以外のフィールドに入力すると、最初のフィールドを除くすべてのテキストフィールドが更新されます。最初のものを入力すると、他のものは完全に更新されます。

これにより、どのデータが更新されるかを確認できcell.textLabel.textました。配列内の特定の位置に等しく設定しましたが、その位置の値は表示されません。

これが私のcellForRowAtIndex方法です:

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    UITextField *tf;

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        cell.accessoryType = UITableViewCellAccessoryNone;
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        tf = [[UITextField alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2 + 25,
                                                           5,
                                                           cell.contentView.frame.size.width/2 - 25 - 25,
                                                           cell.contentView.frame.size.height - 10)];
        tf.font = [UIFont fontWithName:@"Helvetica" size:16];
        tf.textAlignment = NSTextAlignmentLeft;
        tf.backgroundColor = [UIColor clearColor];
        tf.textColor = [UIColor blueColor];
        tf.tag = indexPath.row;
        tf.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
        tf.returnKeyType = UIReturnKeyDone;
        tf.delegate = self;
        tf.keyboardType = UIKeyboardTypeNumbersAndPunctuation;
        cell.textLabel.text = [_titles objectAtIndex:indexPath.row];
        tf.placeholder = cell.textLabel.text;

        [cell.contentView addSubview:tf];
    }
    else
    {
        tf = (UITextField *)[cell viewWithTag:indexPath.row];
    }

    tf.text = [NSString stringWithFormat:@"%.2f", [[_data objectAtIndex:indexPath.row] floatValue]];
    NSLog(@"Value at index %i is %.2f", indexPath.row, [[_data objectAtIndex:indexPath.row] floatValue]);

    cell.textLabel.text = [_titles objectAtIndex:indexPath.row];

    return cell;
}

私がこれを試したとき、私の計算の後、これはログに記録されたものです:

インデックス0の値は1.20です。
インデックス1の値は1.00です
。インデックス2の値は4.55です。

ただし、最初のテキストフィールドには、1.20ではなく0が表示されていました。

これらのテキストフィールドを追加することでどこが間違っていますか?

4

2 に答える 2

0

テキストフィールドを作成して同じ場所に配置するたびに...したがって、新しいテキストフィールドは、以前に作成されたテキストフィールドの後ろに作成されます。

このステートメントを確認する必要があります

UITextField *tf;

tf = [[UITextField alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2 + 25, 5,
                                                       cell.contentView.frame.size.width/2 - 25 - 25,
                                                       cell.contentView.frame.size.height - 10)];

前のものがない場合にのみalloc+init。のために行うことと同様ですcell

編集

タグを確認してください。私が誤解していない場合、デフォルトのタグは0であるため、使用時viewWithTagにテキストフィールドの代わりにtextLabelを選択する可能性があります。テキストフィールドのタグをに設定しindexPath.row + 5ます。

于 2013-01-12T18:17:33.333 に答える
0

このコード行はバグがあるように見えます:

tf = (UITextField *)[cell viewWithTag:indexPath.row];

TableViewCellを再利用している場合、行が一致しないためです。
たとえば、セルは行0として作成され、行10で再利用されます。したがってtf、nilになり、更新されません。

各セルは独自の小さなエコシステムであるため、テキストフィールドのセルごとに異なるタグを付ける必要はありません。それはただかもしれません tf.tag = SOME_CONSTANT;

また、テーブルビューにデータの再読み込みを要求していると思います。

于 2013-01-12T18:19:38.127 に答える