我有一个包含三个表视图单元格的表视图。 在单元格配置期间,我向每个单元格添加一个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 setClearsContextBeforeDrawing:YES]之前删除所有子视图,甚至将占位符值设置为没有成功,没有。
任何指针都会非常感激!
答案 0 :(得分:2)
你正在犯这么多人所犯的经典错误。当表格滚动时,单元格会被重用。
如上所述,每次使用单元格时,您的代码都会不断创建和添加新的文本字段。因此,您将看到在单元格中包含多个文本字段的结果。
您只想向单元格添加一个文本字段。更新您的代码,以便它只添加文本字段(如果它已经存在)。
您的代码中似乎存在逻辑问题。您可以将文本字段直接添加到单元格,但是您尝试将其从单元格contentView
中删除。
改变这个:
[cell addSubview:textField];
为:
[cell.contentView addSubview:textField];