UITextField的不稳定内容作为滚动时表格单元格的子视图

时间:2013-02-11 21:25:57

标签: iphone ios uitableview scroll

我正在尝试将UITextField作为子视图添加到我的表格单元格中。文本字段的内容很好,直到我开始滚动并开始重复使用单元格。图像说明了问题。

first screenshot second screenshot third screenshot

首先,UITextField右侧的蓝色值是正确的,即该值对应于行号。向下和向后滚动的第二个和第三个图像显示这些值以奇怪的方式重复使用。

我该如何避免这种情况?使用reuseIdentifier的唯一值可以解决这个问题,但显然效率不高。

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

    UITextField *numberTextField;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        numberTextField = [[UITextField alloc] initWithFrame:CGRectMake(200, 10, 95, 30)];
        numberTextField.adjustsFontSizeToFitWidth = YES;
        numberTextField.textColor = [UIColor blueColor];
        numberTextField.placeholder = @"Enter value";
        numberTextField.keyboardType = UIKeyboardTypeDecimalPad;
        numberTextField.tag = ([indexPath row]+1);
        numberTextField.backgroundColor = [cell backgroundColor];
        numberTextField.textAlignment = NSTextAlignmentRight;
        numberTextField.clearButtonMode = UITextFieldViewModeNever;
        numberTextField.clearsOnBeginEditing = YES;
        [numberTextField setEnabled:YES];

        [cell addSubview:numberTextField];

    } else {
        numberTextField = (UITextField *)[cell.contentView viewWithTag:([indexPath row]+1)];
    }

    cell.textLabel.text = [NSString stringWithFormat:@"Row %i",[indexPath row]+1];
    numberTextField.text = [NSString stringWithFormat:@"Value: %i",[indexPath row]+1];

    return cell;
}

1 个答案:

答案 0 :(得分:1)

问题是您只在创建时将标记分配给numberTextField。如果它被重用,它就不会重新分配它的标签。

您应该为UITextField使用常量标记号,而不是使用行+ 1。