У меня есть UITable
с ячейками, содержащими UILabel
или UITextField
. Когда я обновляю текст в одной ячейке, он также обновляет текст в другой ячейке далее в таблице.Дублирование UITextFields в UITableViewCell
Я нашел несколько ответов, которые указывают на способ, которым requeueReusableCellWithIdentifier повторно использует ячейку. Однако я не могу понять, как решить проблему. Независимо от того, что я пытаюсь сделать, это не имеет никакого значения или заставляет ячейки быть пустыми.
Это мой код
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellID = [NSString stringWithFormat:@"%@ %ld", @"DataCell_", (long)indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CheckListCell"];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID] autorelease];
}
id obj = [stories objectAtIndex:indexPath.row];
question = (UILabel *)[cell viewWithTag:101];
question.text = [obj valueForKey:@"Question"];
response = (UITextField *)[cell viewWithTag:102]; //THIS IS GETTING DUPLICATED
response.placeholder = [obj valueForKey:@"Question"];
checklistSwitch = (UISwitch *) [cell viewWithTag:103];
cellCheck = cell;
//ResponseTypes C=Checkbox, R=Radiobox, TF=Textfield, TA=Textarea, N=Number, M=Misc
if ([[obj valueForKey:@"ResponseType"] isEqualToString:@"C"] || [[obj valueForKey:@"ResponseType"] isEqualToString:@"R"]) {
question.hidden = FALSE;
response.hidden = TRUE;
if ([[obj valueForKey:@"Checked"] boolValue])
cellCheck.accessoryType = UITableViewCellAccessoryCheckmark;
else
cellCheck.accessoryType = UITableViewCellAccessoryNone;
} else if ([[obj valueForKey:@"ResponseType"] isEqualToString:@"N"]) {
checklistSwitch.hidden = TRUE;
question.hidden = TRUE;
response.hidden = FALSE;
cellCheck.accessoryType = UITableViewCellAccessoryNone;
} else {
checklistSwitch.hidden = TRUE;
question.hidden = TRUE;
response.hidden = FALSE;
cellCheck.accessoryType = UITableViewCellAccessoryNone;
[response setKeyboardType:UIKeyboardTypeDefault];
}
return cell;
}
где вы назвали перегрузочной TableView? –
Вы не должны вычислять cellID. Цель dequeueReusableCellWithIdentifier - удалить и повторно использовать вашу ячейку. Таким образом, все ячейки должны иметь тот же идентификатор ячейки, который вы настроили в Interface Builder. – faviomob
@ Stonz2, обратите внимание, что при редактировании сообщения вы также [одобрили изменения также] (http://stackoverflow.com/review/spected-edits/7298281). Лично я считаю неправильной грамматику. – gunr2171