У меня есть UITableViewController с включенной прокруткой, встроенный в UIContainerView. В табличном представлении есть пользовательский UITableViewCell, в котором есть UIImageView внутри, когда вы выбираете одну из нескольких ячеек в табличном представлении, я получаю индексный путь и устанавливаю представление изображения выбранной ячейки для отображения галочки. Табличное представление динамически заполняется несколькими фрагментами данных из массива. Простой.
Проблема в том, что, поскольку табличное представление длиннее, чем может быть видно в представлении контейнера, может показаться, что путь индекса применяется только для видимого содержимого. Это означает, что он также устанавливает ячейку с соответствующим индексным путем к видимому с галочкой.
Допустим, видны пять ячеек, выбран номер четыре. Вы опускаетесь еще на пять ячеек, и галочка применяется к тому, что должно быть десятой ячейкой, но технически является пятой ячейкой невидимого содержимого. Я предполагаю, что это как-то связано с повторным использованием ячеек, но я не уверен, что делать.
Как это исправить? (Код приведен ниже)
- (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
CuisineTableCell *cell = [tableView cellForRowAtIndexPath:indexPath];
//Store current view in defaults
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if (cuisineSelected == NO) {
cuisineSelected = YES;
cell.imageView.image = [UIImage imageNamed:@"TickedCircle"];
//Set cuisine one defaults
[defaults setObject:[cuisinesArray objectAtIndex:indexPath.row] forKey:@"filterCuisineString"];
[defaults synchronize];
selectedRow = [tableView indexPathForSelectedRow];
}
else if(indexPath.row == selectedRow.row) {
cuisineSelected = NO;
cell.imageView.image = [UIImage imageNamed:@"UntickedCircle"];
//Set cuisine one defaults
[defaults setObject:@"" forKey:@"filterCuisineString"];
[defaults synchronize];
selectedRow = NULL;
}
else {
CuisineTableCell *selectedCell = [tableView cellForRowAtIndexPath:selectedRow];
selectedCell.imageView.image = [UIImage imageNamed:@"UntickedCircle"];
// the one and only cell in the section
cuisineSelected = YES;
cell.imageView.image = [UIImage imageNamed:@"TickedCircle"];
//Set cuisine one defaults
[defaults setObject:[cuisinesArray objectAtIndex:indexPath.row] forKey:@"filterCuisineString"];
[defaults synchronize];
selectedRow = [tableView indexPathForSelectedRow];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"filterCuisineCell";
CuisineTableCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cuisineSelected == NO) {
cell.imageView.image = [UIImage imageNamed:@"UntickedCircle"];
}
cell.textLabel.text = [cuisinesArray objectAtIndex:indexPath.row];
return cell;
}
cellForRowAtindexPath
? - person Merlevede   schedule 12.03.2014