Проблема: многократное использование ячеек таблицы просмотра повторно - PullRequest
1 голос
/ 14 июня 2011

У меня есть табличное представление, мне нужно, чтобы галочка отображалась каждый раз, когда я выбираю строку. (Множественный выбор) Мой код приведен ниже. Я также могу отменить выбор строки.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath  *)indexPath
{
static NSString *RootViewControllerCell = @"RootViewControllerCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:RootViewControllerCell];

if(nil == cell)
{
    cell = [[[UITableViewCell alloc]initWithFrame:CGRectZero reuseIdentifier:RootViewControllerCell] autorelease];

}
cell.textLabel.font = [UIFont fontWithName:[NSString stringWithFormat:@"HelveticaNeue-Bold"] size:12];
textView.textColor = [UIColor colorWithRed:0.281 green:0.731 blue:0.8789 alpha:1];
cell.textLabel.text = [optionsArray objectAtIndex:[indexPath row]];
if (pathIndex == indexPath)
{
    if (cell.accessoryType == UITableViewCellAccessoryCheckmark)
    {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }
    else {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    }
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
pathIndex = indexPath;
[surveytableView reloadData];
}

Но у меня проблема с повторным использованием клеток. Когда я выбираю ячейку, выбирается и другая ячейка в другом месте. Только галочка (или не галочка) получает повторно, другие детали, такие как заголовок строки и т. Д., Не используются повторно. Любые решения, чтобы это исправить. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 11 января 2015

Добавьте это к cellForRowAtIndexPath:

 if ([tableView.indexPathsForSelectedRows containsObject:indexPath]) {
     cell.accessoryType = UITableViewCellAccessoryCheckmark;
 } else if (![tableView.indexPathsForSelectedRows containsObject:indexPath]) {
     cell.accessoryType = UITableViewCellAccessoryNone;
 }

Сработало для меня

0 голосов
/ 14 июня 2011

Проблема в том, что вы делаете что-то с аксессуаром только в том случае, если текущая строка соответствует pathIndex .... так что, если это нормальная ячейка ...?Вы никогда не откладываете это.Вы хотите ...

cell.accessoryType = UITableViewCellAccessoryNone;

if ([pathIndex isEqual:indexPath])
{
   cell.accessoryType = UITableViewCellAccessoryCheckmark;
}

Рекомендуется сбросить ячейки до того, как вы установите какие-либо конкретные свойства.

0 голосов
/ 14 июня 2011

На вашем

if (pathIndex == indexPath)

вы сравниваете указатели, а не их значения, попробуйте

[pathIndex isEqual:indexPath]

или используйте

- (NSComparisonResult)compare:(NSIndexPath *)otherObject;

Затем вы присваиваете значение pathIndex, не сохраняя и не копируя его, как

pathIndex = [indexPath copy];

(конечно, теперь, поскольку вы сохраняете значение, перед копированием нового объекта вы должны освободить предыдущий [pathIndex release];)

Наконец, в вашей реализации не предусмотрено множественного выбора, только один выбор. Вы можете попробовать добавить и удалить объекты NSIndexPath в NSMutableArray и проверить их наличие в изменяемом массиве в cellForRowAtIndexPath.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...