Ios UITextField占位符文本覆盖问题

Ios UITextField占位符文本覆盖问题,ios,objective-c,uitableview,uitextfield,Ios,Objective C,Uitableview,Uitextfield,我有一个带有三个表视图单元格的表视图。 在单元格配置期间,我向每个单元格添加一个UITextField,并在所有文本字段上设置占位符值。 加载表视图时,最终结果如下所示: 我遇到的问题是,当我滚动任何单元格“离开屏幕”时,当它们重新出现时,占位符文本会变得越来越暗,如下所示: 然后,当我尝试通过在中键入名称或通过编程更改最后一个单元格上的占位符值来更改UITextField字符串值时,这些属性的旧值将保留,新值将覆盖在单元格中,如下所示: 以下是负责配置这些单元格的方法: - (UITab

我有一个带有三个表视图单元格的表视图。 在单元格配置期间,我向每个单元格添加一个UITextField,并在所有文本字段上设置占位符值。 加载表视图时,最终结果如下所示:

我遇到的问题是,当我滚动任何单元格“离开屏幕”时,当它们重新出现时,占位符文本会变得越来越暗,如下所示:

然后,当我尝试通过在中键入名称或通过编程更改最后一个单元格上的占位符值来更改UITextField字符串值时,这些属性的旧值将保留,新值将覆盖在单元格中,如下所示:

以下是负责配置这些单元格的方法:

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

    // Configure the cell...
    [self configureCell:cell forIndexPath:indexPath];

    return cell;
}

- (void)configureCell:(UITableViewCell *)cell forIndexPath:(NSIndexPath *)indexPath
{
    for (UIView *subview in cell.contentView.subviews) {
        [subview removeFromSuperview];
    }

    cell.backgroundColor = [UIColor whiteColor];
    cell.autoresizesSubviews = YES;
    cell.clearsContextBeforeDrawing = YES;
    CGRect textFieldFrame = cell.bounds;
    textFieldFrame.origin.x += 10;
    textFieldFrame.size.width -= 10;

    UITextField *textField = [[UITextField alloc] initWithFrame:textFieldFrame];
    textField.adjustsFontSizeToFitWidth = YES;
    textField.textColor = [UIColor lightGrayColor];
    textField.enabled = YES;
    textField.userInteractionEnabled = NO;
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    textField.clearsContextBeforeDrawing = YES;
    textField.clearsOnBeginEditing = YES;

    if (indexPath.section == ATTAddNewTimerSectionName) {
        textField.placeholder = @"Name";
        textField.userInteractionEnabled = YES;
        textField.delegate = self;
        textField.returnKeyType = UIReturnKeyDone;
        textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    } else if (indexPath.section == ATTAddNewTimerSectionDate) {
        textField.placeholder = @"Date/Time";
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    } else if (indexPath.section == ATTAddNewTimerSectionCalendar) {
        if (self.userCalendarEvent == nil) {
            textField.placeholder = @"See list of calendar events";
        } else {
            textField.placeholder = nil;
            textField.placeholder = self.userCalendarEvent.title;
        }
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    }
    [cell addSubview:textField];
}
如您所见,我尝试了各种方法,例如在将新视图添加到单元格之前删除所有子视图,或者在单元格和UITextView上设置-[UIView SetClearContextBeforeDrawing:YES],甚至将占位符值设置为零,但都没有成功


任何指点都将不胜感激

你犯了很多人都犯过的典型错误。滚动表格时,单元格将被重新使用

编写时,每次使用单元格时,代码都会不断创建和添加新的文本字段。因此,您将看到在一个单元格中有多个文本字段的结果

您只希望向单元格中添加一个文本字段。更新您的代码,使其仅在文本字段不存在时添加文本字段

代码中似乎存在逻辑问题。将文本字段直接添加到单元格中,但尝试将其从单元格的
contentView
中删除

更改此项:

[cell addSubview:textField];
致:


是的,这就是问题所在。如果您看到文本与占位符重叠,这是可能的,因为在同一位置有>=2个UITextFields
[cell.contentView addSubview:textField];