Если клетка вновь создана, вы назначаете заполнитель/текст к тексту, поданный. Но если одна и та же ячейка повторно используется и вызывается для повторно использованной ячейки, вы не назначали местозаполнитель/текст в текстовое поле из источника данных текущего пути индекса, чем в текстовом файле будут отображаться данные для предыдущего пути индекса, ячейка была создана. Поэтому для решения проблемы вам нужно назначить текст текстовому полю на основе текста для текущего пути указателя, независимо от того, какая ячейка была вновь создана или повторно использована.
Чтобы решить эту проблему, у вас есть два options-
1) обновлять содержание многоразовых клеток текстового поля с данными текстового поля для текущего индекса пути
2) в случае многоразового высвобождения клеток предыдущее текстовое поле и создать новый, инициализируйте данные для текущей строки.
Второй подход предполагает некоторые накладные расходы, поэтому я предлагаю вам решить вашу проблему с помощью первого подхода.
Пример кода с использованием первой приступающим
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor=[UIColor clearColor];
UITextField *textField = nil;
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cell"];
}
// assign placeholder text to text field
[cell.textFiled setPlaceholder:[textFiledTextsArray objectAtIndex:indexPath.row]];
return cell;
}
Пример кода с использованием 2-го приступающим
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.backgroundColor=[UIColor clearColor];
UITextField *textField = nil;
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cell"];
}
textField = [[cell contentView] viewWithTag:indexPath.row];
if(textField ! = nil)
[textField removeFRomSuperView];
textField = [[UITextField alloc] initWithFrame:CGRectZero];
// customize text filed
// assign placeholder text to text field
[textFiled setPlaceholder:[textFiledTextsArray objectAtIndex:indexPath.row]];
[textField setTag:indexPath.row]; // set tag on text field
[[cell contentView] addSubview:textField];
[textField release];
return cell;
}
Примечание: Приведенный выше пример кода только приблизительное представление, пожалуйста, используйте вышеуказанный источник/настроить его в соответствии с вашими требованиями.
Пожалуйста, попробуйте после удаления этой строки: cell.txt_TCelltext.tag = indexPath.row; –
Сохраните свое значение в источнике данных и используйте его с помощью indexPath, иначе значения будут взаимозаменяемы из-за повторного использования соты. – iphonic
Вам нужно понять, как работают многоразовые ячейки.Когда вы используете повторно используемую ячейку, ячейка, которая выходит из поля зрения, повторно используется для входящей ячейки. Поэтому 'txt_TCelltext' получает данные в дополнение к тому, что он уже имеет, поскольку номер строки изменяется для строки, которая находится в представлении прямо сейчас. – Krishna