我的问题:我有一个用于创建列表的 UITableView 部分。每个 TableViewCell 中都有 UITextField。当您开始键入文本字段时,将插入一个新单元格。所有这些功能都可以完美运行。但是,如果用户创建了许多单元格,它们就会离开屏幕并出现问题。特别是该部分顶部的单元格开始被重用。这会导致新单元格中出现不需要的文本,并删除旧单元格中的文本。我该如何解决这个问题?
此问题的图片:( 在第二张图片中,当我开始输入第 6 项时,第 1 项出现在其下方)
创建 UITableViewCells 的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"AddListInformationCellid";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// Intialize TableView Cell
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.backgroundColor = [UIColor whiteColor];
// Initialize TextField
// ... code ommitted for brevity
// Custome intializiation per each kind of TextField
if (indexPath.section == 0) {
playerTextField.tag = 0;
playerTextField.placeholder = @"Title";
}
else if (indexPath.section == 1) {
// Here's where the problem starts *********
playerTextField.tag = indexPath.row + 1;
playerTextField.placeholder = @"List Item";
}
[cell.contentView addSubview:playerTextField];
}
return cell;
}
添加/删除单元格的代码
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
NSInteger section = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview].section;
NSInteger row = [self.tableView indexPathForCell:(UITableViewCell *)textField.superview.superview].row;
if (section == 0) {
_myList.name = textField.text;
}
else if (section == 1) {
// Delete cell that is no longer used
if ([string isEqualToString:@""]) {
if (textField.text.length == 1) {
if (cellCount > 1) {
cellCount = cellCount - 1;
[self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row inSection:1]] withRowAnimation:UITableViewRowAnimationAutomatic];
textField.text = @"";
}
}
}
// Add a new cell
if (self.beganEditing) {
if (![string isEqualToString:@""]) {
if (row == [self.tableView numberOfRowsInSection:1] - 1) {
cellCount = cellCount + 1;
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:row + 1 inSection:1]] withRowAnimation:UITableViewRowAnimationAutomatic];
self.beganEditing = NO;
}
}
}
}
return YES;
}